[Notes] 可持久化数据结构学习笔记

可持久化数据结构 就是使数据结构可以返回历史版本

一般的实现方法是新建有修改的点 其他点与上一版本共用 这样做到空间复杂度带上一个或两个log


主席树(可持久化线段树、函数式线段树)


每次新增一条从叶子到根的链 因为有修改

学习参考资料:


MetalSeed:主席树介绍


qian99主席树学习笔记


Seter:1901: Zju2112 Dynamic Rankings


徐亦轲:主席树


题目练习:


[主席树套堆 区间修改 标记永久化] BZOJ 3489 A simple rmq problem


[树状数组套权值线段树] BZOJ 1901 Zju2112 Dynamic Rankings


[主席树 启发式合并] BZOJ 3123 [Sdoi2013]森林


[主席树] BZOJ 3673 可持久化并查集 by zky BZOJ 3674 可持久化并查集加强版


[主席树 树状数组套权值线段树] BZOJ 1146 [CTSC2008]网络管理Network


[主席树 二分答案] BZOJ 2653 middle



可持久化字典树


类似主席树 每次新增一条从叶子到根的链 实际上字典树就是线段树

题目练习:


[可持久化字典树] BZOJ 3261 最大异或和


[可持久化字典树 分块] BZOJ 2741 【FOTILE模拟赛】L


[可持久化字典树] BZOJ 4546 codechef XRQRS



可持久化平衡树


SBT、Splay以及旋转版Treap等BST都不可以比较方便地实现‘可持久化操作’

选择用非旋转版本的treap

奉上 memphis blog一篇:


非旋转Treap及可持久化[Merge,Split]


题目练习:


UVA 12538 Version Controlled IDE 可持久化treap


可持久化块状链表


有的时候复杂度较其他会更优 参考丽洁姐的pdf


可持久化并查集


实际上就是维护一个可持久化的数组

用可持久化线段树 或 可持久化平衡树做

详见bz上zky的题


3674: 可持久化并查集加强版



参考资料


Persistent Data Structures(可持久化的数据结构)


可持久化数据结构研究 CLJ



范浩强_wc2012谈谈各种数据结构




你可能感兴趣的:(Notes,可持久化数据结构)