【WC 2026】lhx 数据结构
treap:期望深度 \(3\log_2\)。
- 应用:后缀平衡树,类似重量平衡树去给每个节点赋权值,这样每次插入新后缀时,我们可以容易地和某个原有后缀比较大小:
- 先比较第一位字符。
- 若相等比较去掉第一个字符的大小,这两个后缀在平衡树中已经存在。
- 有交合并:
- 按照较大的根对另一棵树进行切割,对于切出来的分别与左右子树合并。
- 不妨设 \(siz_1\le siz_2\),一般情况下,这个复杂度是 \(O(siz_1\times \log (\frac{siz_1+siz_2}{siz_1}))\)。
- 合并 \(m\) 个 treap,总大小为 \(n\),合并总复杂度为 \(O(n\log n)\),可以用于树上合并。
- 对于一棵平衡树,split 后 unite,均摊 \(O(n\log n\log V)\)。
WBLT:\(\alpha\) 取 \(\frac{1}{4}\) 可以避免浮点数运算。
- 好像没写过 merge/split 版本的。
全局平衡:
- 重剖+线段树:重剖往上跳轻边子树大小翻倍,我们希望在线段树中也有这个性质。
那么将线段树按照轻子树大小和比例进行加权,复杂度 \(\log\)。 - 点分+分治:令 \(u\) 的分治深度按照分治时的 \(siz_u\) 加权,复杂度 \(\log\)。
- 带权分治(集合):
- 合并果子,但是复杂度 \(\log_{\varphi}\)。
- 将比例下降到 2 的整数幂,合并果子,复杂度 \(\log_2\)。
- 带权分治(序列):
- 划分为两部分,保证差最小。复杂度 \(\log_\varphi\)。
- 将比例下降到 2 的整数幂,使用栈维护:
- 若栈顶两个都比 \(r_i\) 小,合并栈顶,重复执行。
- 若栈顶小于等于 \(r_i\),则合并栈顶和 \(i\)。插入 \(i\)。
- 复杂度 \(\log_2\)。
多树二分:
P5314 [Ynoi2011] ODT
直接重剖,维护轻儿子平衡树,这样是 \(O(m\log ^2n)\)。
分 $k=0,1,2\dots $ 级重儿子,其中 \(k\) 级重儿子有 \(2^{2^k}\) 个。
莫队与等价类分治:
- 莫队:\(B=\frac{n}{\sqrt q}\)。
- 等价类分治:
- 按照 \(B\) 分块,分治处理每个块。
- 复杂度 \(O(\frac{n}{B}(q+T(B)))\),其中 \(T(m)=2T(\frac{m}{2})+O(f(m))\)。
浙公网安备 33010602011771号