可持久化线段树详解

主席树是一种可持久化线段树,当初是由名叫hjt的神犇发明的。(故名。)

基础思路:

以单点修改为例:
考虑朴素做法,每进行一次修改操作就建一棵新线段树。

可以发现,由于每次修改只改变一条链的值,上述做法可以优化为这样:
每次修改时,只新建被影响的链,其余部分共用上一版本的,和上述做法等价。
r t i rt_i rti表示第i次的根。)
请添加图片描述
请添加图片描述

“共用”的方法:

所有主席树节点共用一个内存池nod tr[N*log(q)];
此时,一个节点的左右子节点可指向任意版本的任意节点。指向被共享节点即可。
以修改4为例。
请添加图片描述

代码讲解:

change部分

变量:
f-> 当前位置的历史节点。(参考线段树)
L,R->当前位置节点所代表的区间左右端点。
x, d->要修改位置及增加值。
解释一下返

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值