【训练日记】20170419
T2:传送门
题意:二维平面上有n(n≤200,000) 个传送门,第i 个传送门位于(xi,yi),且可以传送到以自身位置为左下角,以(ai,bi)为右上角的平行坐标轴的矩形中任何一个其他传送门。任意选定起点和终点,求从起点传送到终点的路径上最多经过多少个传送门。坐标范围在0∼200,000之间。空间限制512MB。
题解:一个很容易想到的方法是用二维线段树维护最大值,但这样会MLE+TLE。通过动态开节点可以解决MLE的问题。注意到如果将传送门按横坐标降序排序,可以将第一维线段树转化成前缀最大值查询问题,改为树状数组可以减小常数。对于坐标重合的传送门,需要共同处理。理论上这样就能通过本题,但我写得太丑陋,常数大了一倍,不知如何卡常。
T3:毛毛虫
题意:给出一个n(n≤100,000) 个节点的树,每个节点有一个权值,接下来有q(q≤200,000)次操作,操作有如下两种:
1. 给出x,y,c,将链(x,y)上的点和链(x,y)的所有相邻点的权值加上c。
2. 给出
题解:任意选一个根节点之后,在每个节点记录儿子的权值和,这样对一条链的修改操作可以用线段树实现。考虑一次修改操作(x,y,c),其等效于(x,root,c)+(y,root,c)+(lca,root,−c)+(fa[lca],root,−c)+单点修改(lca,c)+(fa[lca],c),其中lca表示x,y的最近公共祖先。在树链剖分的基础上可以实现。