浅谈主席树

前言:

看很多dalao都写这些算法总结什么的,我也来水一篇


正题

主席树是一种高级数据结构,是线段树的高级形式(可持久化线段树)
修改线段树的时候,需要用到历史版本,可是如果记录每一棵线段树又会MLE。
我们可以发现,每次修改只是修改一条链,别的节点就算没修改我们也会新建一棵树,于是我们只新建一条链,然后将它的值进行修改,再和旧线段树不修改的点连起来
修改某一条链(Root,2,5)时:

Root还是连接着节点1,2 节点1还是连接着3,4, 节点2还是连接着5,6。我们可以发现,节点1,3,4,6这些没有修改过的节点都用了两次
拆开看:

发现其实就是两棵树,和上面所说的的每次新建一颗树是一样的。
这样以来,每次修改只需要用到 log n的空间复杂度,每棵线段树用到4·n左右,如果共有N次修改,每次修改用4·n加起来就是4·n22,这样一来,数据一大就会MLE。

入门题目:

高级打字机(有很多种方法,但是如果用主席树会比模板还简单,洛谷有)
KUR-Couriers(洛谷有)
POJ2104
POJ2761
HDU2665


后序:

第一次写…觉得写的不好下面评论(我会看的)…觉得写得好就给个赞QAQ

转载于:https://www.cnblogs.com/Juruo-HJQ/p/9306861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值