海压竹枝|

CheZiHe929

园龄:1年10个月粉丝:9关注:4

可持久化数据结构

可持久化数据结构简介

分类

部分可持久化

所有版本都可以访问,但是只有最新版本可以修改。

完全可持久化

所有版本都既可以访问又可以修改。

实际应用

几何计算(扫描线),字串处理(合并操作 rope),版本回溯,函数式编程。

可持久化线段树

引入[P3834 【模板】可持久化线段树 2]

首先考虑静态全局第 k 小,可以用权值线段树,在线段树上二分,同时也支持动态全局第 k 小(单点修改)。

考虑静态区间第 k 小,对于每个前缀 a1,2,,n 都建一个权值线段树 TiTi 中代表区间 [l,r] 的节点存前缀 ai,2,,n 中有多少个数在 [l,r] 内。

对于 [l,r] 的询问,我们只需将 TrTl1 两棵树中的对应节点相减,就得到了该区间的权值线段树。

但一共需要 O(n2) 个节点,考虑优化。

发现 TiTi1 只修改了从 ai 对应的叶子节点到根节点的路径上的权值,共 O(logn) 个节点。

因此,从 Ti1Ti 的过程中,我们只需要新建发生变化的 O(logn) 个节点,剩下的节点与 Ti1 共用(即新建根节点,被修改的儿子新建节点,未被修改的儿子仍用 Ti1 的)。

区间修改同理,同样只有 O(logn) 个节点被修改。

posted @   CheZiHe929  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起