四毛子算法

四毛子算法:

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)\) 求得答案。

posted @ 2024-09-12 19:19  WhisperingWillow  阅读(275)  评论(0)    收藏  举报