题解:P15130 [ROIR 2026] 超级跳跃

· · 题解

爆标做法。

答案就是 [l,r] 内的点构成的凸包点数。这个部分分已经把分治写脸上了,那么分治的每一层我们要干这两个事情:

首先可以持久化李超树做到 \mathcal{O}(n\log^3 n),但是太不牛了。发现凸包其实是一个单调栈的结构,在跑单调栈时,将末尾元素向上一个元素连边,会形成一棵树。那么一个凸包可以表示为一条到根链。倍增找切点即可,时间复杂度 \mathcal{O}((n+q)\log^2 n)

能不能再给力一点?仿照 这个题 的方法,进行树剖,那么一个凸包可以表示为 \mathcal{O}(\log n) 段连续的数组的拼接。那么先用双指针定位,再二分即可。时间复杂度 \mathcal{O}((n+q)\log n)