主席树

本文介绍了一种高效的数据结构——可持久化线段树,它是通过仅更新需要变动的部分来实现对线段树历史状态的记录。文章通过一个具体的例子展示了如何将一个节点的值从1更改为5,并讨论了这种方法相比于重新创建整棵树的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主席树:可持久化线段树。

可持久化线段树:保存历史记录的线段树。

来源:某大神考场上不会打某数据结构而发明的 Orz

如果更新某线段树要记录它的历史记录,最暴力的方法就是新开一棵线段树。

时间空间明显都很大。

我们发现:每次修改,线段树都只用修改某条路径上 log2n 个点,如果新开线段树全都再搞一遍太不划算了。

那我们可以试着只修改要修改的那条路径。

以线段树经典用法求区间最大为例,如图:

将区间 [1,2,3,4] 中的 1 改为5

主席树

要修改的点重开一个空间,不用修改的直接连回原来位置就好啦。

可持久化线段树拥有了很多普通线段树不具有的特殊性质,所以也有了很多妙用。

例题:BZOJ2809 (这里题解)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值