主席树学习笔记

权值线段树

就是指线段树的叶子节点保存的是当前值的个数。

权值线段树一般支持以下三个操作:

  • insert

  • erase/remove

  • query

贴一个alphadalao的题解。


主席树

主席树,也叫做可持久化线段树,准确来说,应该叫做可持久化权值线段树,因为其中的每一颗树都是一颗权值线段树。

经典例题:查询区间第k小。

主席树是静态的。

为了实现可持久化,就要保存树的历史版本。最自然的想法当然是每进行一次修改,就新建一颗线段树,这样的空间复杂度显然是不能够接受的。通过观察不难发现,每次进行单点修改,发生变化的只有从叶子节点到根节点这一条链上的节点,换句话说,只有 logN 个节点发生了变化,而其他的节点都可以重用,没有必要新建。


看图非常好理解。

超棒的讲解

然后就是一些实现上的细节了。

  • 先建立不同的根,接下来只要修改 logN 个节点,查询从根节点开始即可。
  • 数组大约要开 MlogN+4logN 大小。
posted @   lxg_swrz  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示