那每次递归时找的就是区间内 pre \in [1,l] 或 suf \in [r,n] 的点对应的集合,这样每个集合至多前后两个点被找出来,复杂度才是对的。
现在的问题是维护 pre 和 suf,这个是不是可以启发式合并啊(,对于小的集合每个元素在大的集合的 set 里找前驱后继然后在线段树上更新。(同时也需要在线段树上更新前驱后继的信息)这样做是 O(n \log^2 n) 的,并查集的复杂度没有乘 \log 可以略去(。
???
考虑每次只把取出来的点的 pre 和 suf 更新一下(,这是为什么捏?考虑 u \in y 在 \textbf{Merge}(x,y) 时没有被更新,那么只有一种可能,就是 u 本来所在的凸包位置处没有和其他凸包发生合并(不可能产生交叉边,因为一旦有交叉边就会被转为凸包边),那么它就不需要被更新。所以你每次只需要把所有关键点暴力排个序然后更新这些点的信息就行了。