学习笔记:可持久化线段树(主席树):静态 + 动态
学习笔记:可持久化线段树(主席树):静态 + 动态 前置知识: 线段树。线段树分享可以看: @秦淮岸 、 @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