P5103-JOI-2016-Final-断层-Geologic-Fault
题意
平面直角坐标系,只考虑第三象限的点。\(Q\) 次操作以下之一:
- 将过 \((X_i,0)\) 的一条斜率为 \(1\) 的点的上方所有点平移到 \((x+L_i,y+L_i)\)
- 将过 \((X_i,0)\) 的一条斜率为 \(-1\) 的点的上方所有点平移到 \((x-L_i,y+L_i)\)
求最后 \(y\) 轴上 \(\{ \big((x-1,0),(x,0)\big)|x\in 1,2, \ldots ,n \}\) 的点一开始是第几层的。
\(n,Q\le 2\times 10^5,-10^9\le w_i\le 10^9,1\le l_i\le 10^9\)
思路
正着做不太好维护,考虑时光倒流,上升变成下降。那么从关心所有的点我们就转变成了只需要求最后所有的 \(0\) 的点的位置即可。
对于这种斜率为正负 \(1\) 的直线,且横纵坐标都会发生变化比较难搞。我们考虑旋转 \(45\degree\),新的点会变成 \((x-y,x+y)=(a,b)\)。那么我们考虑两个操作,变成了:
- \(y-x> X_i\implies a< X_i\),操作为 \(b\to b-2L_i\)。
- \(x+y>X_i\implies b>X_i\),操作为 \(a\to a+2L_i\)。
然后我们考虑要求的 \((x-1,x)\),不妨将其设为 \(x\) 点,那么只需要将前一个操作改为能取等即可。
之后考虑我们要求的 $(i,i)。我们会发现,减法改的是 \(b\) 的前缀,加法改的是 \(a\) 的后缀。所以都是满足单调性的,于是直接线段树二分即可做到 \(\mathcal{O}(q\log n)\)。

浙公网安备 33010602011771号