四毛子算法
四毛子算法:
Part 1:+-1 RMQ
+-1 RMQ 表示变化量为 \(1\) 或 \(-1\) 的 RMQ。
简单来说:分块 RMQ。
块长 \(B = \lfloor \dfrac{\log n}{2} \rfloor\),整块 ST 表,这部分不超过 \(\mathcal O(n)\)。
散块不超过 \(2^{B}\) 种,也是 \(\mathcal O(n)\) 的。
Part 2:构建笛卡尔树。
更普遍的,我们构建大根堆笛卡尔树,我们发现一个区间 \((u , v)\) 的最大值恰好等于 \(v_{\operatorname{lca}(u , v)}\)。
Part 3:欧拉序求 LCA。
我们求出笛卡尔树的欧拉序,且欧拉序满足 +-1 RMQ 的性质。
因此可以 \(\mathcal O(1)\) 求得答案。