前言:
看很多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·n
2
2
,这样一来,数据一大就会MLE。
入门题目:
高级打字机(有很多种方法,但是如果用主席树会比模板还简单,洛谷有)
KUR-Couriers(洛谷有)
POJ2104
POJ2761
HDU2665
后序:
第一次写…觉得写的不好下面评论(我会看的)…觉得写得好就给个赞QAQ