【整理】主席树初识(别人的图)
2017-11-30 18:49
141 查看
【CLJ】
所谓的“持久化数据结构”,就是保存这个数据结构的所有历史版本,同时利用它们之间的共用数据减少时间和空间的消耗。
【Regina】
主席树是一种离线数据结构,是由很多棵线段树组成的。
第i棵线段树存的是前i个数的信息:
每一个线段存数字的出现次数(因此建树之前要离散化)。
n棵线段树会MLE。
但是我们发现第i棵线段树和第i-1棵线段树是非常相似的,有许多结点完全相同,因此可以借用之前的结点,没必要新建结点。
建树方法建下图:
(看看图基本上就能理解了)
序列为 4 1 3 2(离散之后,数字是大小排名)
【图一】:看编号,我们发现圆圈里值发生变化时,会产生新的编号(即新的节点)。
即每次最多新产生logn个节点,空间就是省在了整理。
【图二】:结果就产生了这样一棵树,这棵树可以前缀和操作。
那么如果要询问i-j之间数字出现的次数怎么办呢?
因为每一棵线段树的区间都是相同的,所以要求l-r之间的数字的出现次数只要用前r位出现的次数减去前l-1位出现的次数,就是ans
但是如果有修改操作怎么办?
如果沿用上面的做法,那么修改操作是O(nlogn)的,查询是O(1)的,修改要花好长时间。。。
前缀和联想到了树状数组,那么将前缀和用树状数组维护的话修改是O(logn*logn),查询时O(logn),查询的时间虽然变长,但是修改的时间缩短许多!!
注意:
函数式线段树的数组要开大一点!!
【参考】
简洁的解释:http://blog.csdn.net/regina8023/article/details/41910615
具体的操作:https://www.cnblogs.com/zyf0163/p/4749042.html
所谓的“持久化数据结构”,就是保存这个数据结构的所有历史版本,同时利用它们之间的共用数据减少时间和空间的消耗。
【Regina】
主席树是一种离线数据结构,是由很多棵线段树组成的。
第i棵线段树存的是前i个数的信息:
每一个线段存数字的出现次数(因此建树之前要离散化)。
n棵线段树会MLE。
但是我们发现第i棵线段树和第i-1棵线段树是非常相似的,有许多结点完全相同,因此可以借用之前的结点,没必要新建结点。
建树方法建下图:
(看看图基本上就能理解了)
序列为 4 1 3 2(离散之后,数字是大小排名)
【图一】:看编号,我们发现圆圈里值发生变化时,会产生新的编号(即新的节点)。
即每次最多新产生logn个节点,空间就是省在了整理。
【图二】:结果就产生了这样一棵树,这棵树可以前缀和操作。
那么如果要询问i-j之间数字出现的次数怎么办呢?
因为每一棵线段树的区间都是相同的,所以要求l-r之间的数字的出现次数只要用前r位出现的次数减去前l-1位出现的次数,就是ans
但是如果有修改操作怎么办?
如果沿用上面的做法,那么修改操作是O(nlogn)的,查询是O(1)的,修改要花好长时间。。。
前缀和联想到了树状数组,那么将前缀和用树状数组维护的话修改是O(logn*logn),查询时O(logn),查询的时间虽然变长,但是修改的时间缩短许多!!
注意:
函数式线段树的数组要开大一点!!
【参考】
简洁的解释:http://blog.csdn.net/regina8023/article/details/41910615
具体的操作:https://www.cnblogs.com/zyf0163/p/4749042.html
相关文章推荐
- Windows 2003上安装配置SVN服务器及客户端 结合别人的文章以及自己实践整理
- 整理收藏别人的网站
- postion使用和table标签的默认属性整理及字体的属性初识
- Linux文件系统, 好久没用都记不清了, 看到别人整理的, 作个记录.
- 初识react之react+webpack+es6环境配置步骤整理
- 整理关于牛人们对图书管理系统领域建模的精彩讨论,以此希望大家学习下别人是如何思考的
- html初识(黑马笔记整理)
- nosql篇mongodb初识与安装整理以及与关系型数据库对比
- 主席树 学习整理
- java在线人数监听(没有好好整理,只是从别人那把帖子借鉴过来)
- assign,copy,retain和weak,strong(借鉴别人并整理的)
- 这是以前别人发的帖子,我整理了一下,都是一些很有趣的题目。
- JAVA高级工程师课程笔记整理——(一)初识JAVA
- 看别人的代码,整理一些零碎的东西
- VCL消息分析(参考别人,自己再整理的)
- 模板整理(总结别人的及自己的,每周更新)
- Html初识整理
- 找到一个非常好的集成了很多开放库的别人整理的网站,值得收藏 oc
- 整理下维护别人项目遇到的Bug或者错误写法
- 自己在别人开源的基础上整理和使用的HTML编辑器