赫露艾斯塔/半平面莫队

莫队我们实际上把 \(m\) 个询问分成若干组,然后一组内 \(|S_i\oplus S_{i+1}|\) 有保证。跨组的总数不多。

半平面莫队是,我们随机 找出 \(B\) 个关键点,然后我们把一个半平面分配给它包含着,并且离他最近的关键点

然后一个关键点组内按照斜率排序。

块间很显然贡献就是 \(O(Bn)\)

块内这么考虑 \(|a\oplus b|\leq |a\oplus a'|+|a'\oplus b'|+|b'\oplus b|\)

我们记 \(S_i'\) 为将 \(S_i\) 这个半平面平移到关键点后的半平面。

这样我们就可以把原先的放缩成:

\[ 2\sum |S_i\oplus S_{i}'|+\sum |S_i'\oplus S_{i+1}'| \]

不难分析出后面那个实际上就是 \(O(n)\) 的。

然后考虑 \(S_i\oplus S_{i}'\) 如果我们把整个平面旋转成 S_i 是竖直的。那么变成了一个序列上随便选 \(B\) 个关键点,问你一块内部点数的期望。

这就是 \(n/B\) 呀。

然后就能分析出来复杂度是 \(O(nB+\frac{mn}{B}\) 这个就是取到 \(\sqrt m\) 就行了。


数学啥都不会了。

\(Ax+By+C=0\) 的法向量是 \((A,B)\)......排序时候排法向量就行了。。。。。


赫露艾斯塔/半平面莫队
https://proton-z.github.io/2022/09/12/Mo's/
作者
Imitators
发布于
2022年9月12日
许可协议