【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\)

UOJ960【USsR #1】程序校验

UOJ1017 【ULR #3】程序校验 II

多树二分

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))\)

qoj14685 Epilogue of Happiness

posted @ 2026-04-12 21:20  TallBanana  阅读(40)  评论(0)    收藏  举报