线段树 4

可持久化线段树&主席树

似乎学到了一点点
主席树——可持久化权值线段树
于是就正式开坑了

权值线段树

权值线段树是维护值域信息的线段树
在一个数组\(a\)上建权值线段树,
每个节点维护的是区间\([l,r]\)中,每个数据出现的次数

可持久化

可持久化基于的是一个原理:
继承前后修改中不变的数据
于是我们只对修改的部分重新建节点
剩下的部分继承即可

对于单点修改来说:
每一次单点修改至多递归\(\log n\)次(基于二分)
所以至多新建\(\log n\)次节点
因此时空复杂度均为\(O((n+q)\log n)\)

写法

由于要新建节点,我们考虑动态开点
然后第一个注意点出现了
就是直接改左右节点成新加节点
\(l\)代表左儿子,\(r\)代表右儿子
然后区间改成传参就好了

一些比较?的东西

就是有的区间修改单点查询
一般主席树上的东西显然满足区间可加
于是差分/前缀和直接转单点修改区间查询
一般这玩意不会出区间修改区间查询
最后想讲的就是标记永久化
但是没做过

应用

区间K大

这种显然就是板子题了
动态区间第K大还要考虑修改
这个时候套个树状数组
然后查询的话都是一个道理:
就是多个不同版本的权值线段树作差
(难理解的话就相当于新建了一棵权值线段树,
维护的信息刚好是几棵线段树差值)
然后看左儿子的\(size\)是否大于\(k\)就好了

权值线段树问题的区间版

这个就比较?了
两个根相减即可
包括各种问题都是可以做的

\(K\)大求和

这里写个自己想的东西
就是每个节点额外维护下序列中所有在这个区间里的数的和
查询的时候查\(K\)大顺便维护下和就好了

二维问题

主席树另一个可以开发的方面
必须是根节点啊
根节点维护下标区间
线段树就是权值区间
其实并不难理解

带修问题

套树状数组即可

区间改点查

同树状数组
维护差分信息将区间改转换成单点改
对应的点查就是前缀和累加的区间查

posted @   2K22  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示