前言:

看很多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·n2,这样一来,数据一大就会MLE。

入门题目:

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


后序:

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

相关文章:

  • 2021-05-11
  • 2022-01-10
猜你喜欢
  • 2022-12-23
  • 2021-08-06
  • 2021-05-22
  • 2021-06-14
相关资源
相似解决方案