学习笔记:可持久化线段树(主席树):静态 + 动态
学习笔记:可持久化线段树(主席树):静态 + 动态 前置知识: 线段树。线段树分享可以看: @秦淮岸 、 @ZYzzz 、 @妄想の岚がそこに 树状数组。$BIT$分享可以看: @T-Sherlock 、 Chicago 、 @weishengkun 权值线段树:相当于将线段树当成一个 桶 ,其中的每一个点所代表的区间相当于 一段值域 。维护的值为这段值域中的一些信息。 例如该图,节点$2$代表的是值域为$[1, 2]$的区间,节点$6$代表值域为$[3, 4]$的区间... 可持久化概念: 可持久化实质上就是存储该数据结构 所有的历史状态 ,以达到高效的处理某些信息的目的。 静态区间第$k$小 抛出问题 题目链接 :给定长度为$N$的序列$A$,有$M$次询问,给定$l_i, r_i, k_i$,求在$[l_i, r_i]$区间内第$k_i$小的数是多少。 $N <= 10^5, M <= 10^4$ 先考虑如何求总序列第$k$小 我们可以建立一颗权值线段树,每个点存储的信息为 该值域区间存在的数的个数 。 因为线段树的性质,所以每个点的左子树的值域区间 $ <= $ 右子树的值域区间。 所以我们先看左子树区间有多少个数,记为$cnt_{left}$。 如果$k_i <= cnt_{left}$,说明第$k_i$小的数一定在左子树的值域内,所以问题便转换为了“在左子树的值域内找第