数据结构总结
1. 树状数组(Fenwick Tree)
- 时间:
query\(\mathcal O(\log n)\),update\(\mathcal O(\log n)\) - 空间:\(\mathcal O(n)\)
- 特点:仅支持前缀可减操作(和、异或),常数极小,代码简短。
- 扩展:支持区间加 + 区间和(双BIT)、二维树状数组 \(\mathcal O(\log^2 n)\)。
2. 并查集(DSU)
- 时间:
find\(\mathcal O(\alpha(n))\)(路径压缩+按秩合并),union\(\mathcal O(\alpha(n))\) - 空间:\(\mathcal O(n)\)
- 特点:维护连通性、传递关系(种类并查集)、离线动态连通性(按时间分治)。
- 注意:不带撤销版本为均摊复杂度,带撤销时变为 \(\mathcal O(\log n)\)。
3. 平衡树(Treap / Splay / FHQ-Treap)
目前只学了 FHQ Treap
- 时间:
insert/delete/rank/kth/pre/suf均为 \(\mathcal O(\log n)\) 期望/均摊 - 空间:\(\mathcal O(n)\)
- 特点:支持序列操作(分裂合并)或值域操作,FHQ-Treap 可持久化容易实现。
- 替代:
std::set/std::map为 \(\mathcal O(\log n)\),但功能受限(无kth)。
4. 堆(优先队列)
- 普通堆(二叉堆):
- 时间:
push\(\mathcal O(\log n)\),pop\(\mathcal O(\log n)\),top\(\mathcal O(1)\) - 空间:\(\mathcal O(n)\)
- 时间:
- 可并堆(左偏树):
- 时间:
merge\(\mathcal O(\log n)\),push/pop同上 - 空间:\(\mathcal O(n)\)
- 时间:
- 应用:Dijkstra、Kruskal 优化、动态第k大(对顶堆)。
5. 单调队列 / 单调栈
- 时间:每个元素入/出一次,均摊 \(\mathcal O(1)\)
- 空间:\(\mathcal O(n)\)
- 特点:维护区间最值(滑动窗口)、最近更大/更小元素,常用于DP优化(斜率优化前置)。
6. ST表(稀疏表)
- 时间:预处理 \(\mathcal O(n \log n)\),查询 \(\mathcal O(1)\)(RMQ / 可重复贡献问题)
- 空间:\(\mathcal O(n \log n)\)
- 特点:静态区间最值、GCD、按位与等,不支持修改。
7. 分块(Sqrt Decomposition)
- 时间:
query\(\mathcal O(\sqrt n)\),update\(\mathcal O(\sqrt n)\)(或 \(\mathcal O(1)\) 块内+ \(\mathcal O(\sqrt n)\) 整块) - 空间:\(\mathcal O(n)\)
- 特点:平衡复杂度,代码直观,可处理线段树难维护的操作(如区间众数、区间模数)。
8. 莫队(离线)
- 时间:\(\mathcal O((n+q) \sqrt n)\) 普通莫队,带修 \(\mathcal O(n^{2/3})\) 每操作
- 空间:\(\mathcal O(n)\)
- 特点:离线处理区间询问,要求操作可快速 \(\mathcal O(1)\) 扩展/收缩区间。
- 扩展:树上莫队、回滚莫队。
9. 可持久化数据结构
- 可持久化线段树(主席树):
- 时间:
query\(\mathcal O(\log n)\),update\(\mathcal O(\log n)\) - 空间:\(\mathcal O(n \log n)\)(每次新建 \(\log n\) 节点)
- 应用:静态区间第k小、树上路径第k小。
- 时间:
- 可持久化Trie:
- 时间:\(\mathcal O(\log V)\),空间 \(\mathcal O(n \log V)\)
- 应用:最大异或和、区间异或最值。
10. 动态开点线段树
- 时间:同普通线段树 \(\mathcal O(\log V)\)
- 空间:\(\mathcal O(m \log V)\)(m为操作次数),避免 \(4V\) 爆炸
- 特点:值域大(如 \(10^9\))时必用,可合并(线段树合并)用于树上统计。
11. 树链剖分(重链剖分)
- 时间:路径操作 \(\mathcal O(\log^2 n)\)(剖分+线段树),子树操作 \(\mathcal O(\log n)\)
- 空间:\(\mathcal O(n)\)
- 特点:静态树上的路径/子树修改查询,是LCT的静态替代方案,常数较小。

浙公网安备 33010602011771号