2026.7.18 树分治

Giant Penguin

待补。

Adrian the Wonder Child

待补。

[CEOI 2024] 加油站

待补。

[Ynoi2004] rpmtdq

区间询问最值点对,可以考虑寻找支配点对

如果 \(x<y<z\) 满足 \(\text{dis}(x,y)<\text{dis}(x,z)\),那么显然 \((x,z)\) 是没用的。但是路径长度不好处理,考虑点分治来处理路径长度,于是记 \(d_i\)\(i\) 到分治重心的距离,条件变为 \(d_x+d_y<d_x+d_z\),即 \(d_y<d_z\)。那么可以考虑按下标扫,扫的时候维护一个单调栈,每次弹栈的时候这个点后面的点都会与加入的点配对而非弹掉的点,因此可以将弹掉的点与加入的点组成一个支配点对加入。做完后栈顶也和加入的点组成了一个支配点对。

由于这个条件是可以对称的,因此需要反过来再做一遍。找出所有支配点对后,不难发现其只有 \(O(n \log n)\) 对,因此可以直接做二维数点。时间复杂度 \(O(n \log^2 n + q \log n)\)

[Ynoi2011] 成都七中

这个东西到底为什么能想到点分治?

考虑若点分治过程中点 \(x\) 可以只经过 \([l,r]\) 内的点到达分治重心 \(rt\),那么询问 \((x,l,r)\) 等价于询问 \((rt,l,r)\)。于是我们把这种询问全部挂在 \(rt\) 上。

现在问题很好处理了,对当前层每个点计算 \(\text{maxx}_i,\text{minn}_i\) 表示 \(i\)\(rt\) 经过的最大点和最小点,问题等价于有多少个颜色满足存在一个该颜色的点 \(i\) 使得 \(\text{minn}_i \le l \le r \le \text{maxx}_i\)。用类似二维数点的手法,按照询问左端点排序,点按照 \(\text{maxx}\) 排序,对每个颜色维护一个出现过的 \(\text{maxx}\) 的最小值挂在树状数组上查询即可。

时间复杂度 \(O(n \log^2 n)\)

串联

待补。

[JOIST 2025] 宇宙怪盗 / Space Thief

待补。

[CEOI 2022] Drawing

待补。

posted @ 2026-07-19 21:26  luqyou  阅读(5)  评论(0)    收藏  举报