权值线段树

权值线段树

首先要会线段树

权值线段树可以近似理解为一个桶,每个叶子节点维护的是当前维护的数的出现个数,每个节点维护的是当前节点维护的区间的数的个数。

例如: 1 1 2 2 3 3 4 4

维护点1的叶子节点的值为2,维护区间[1,2]的节点的值为4。

主要操作和正常线段树一模一样(

懒狗摸了,不贴代码了

权值线段树求区间第K大值

O(logn)

如果K比当前节点右儿子大,当前节点的右儿子所有值都比左儿子大,说明第K大值在左儿子中,且K要减去右儿子维护区间的值,因此问题就转变为在一个新的区间中求一个新K大值的问题;如果比当前右儿子小,即第K大值在右儿子维护区间中;递归即可。

posted @ 2020-11-12 00:52  PopHirasawa  阅读(121)  评论(0编辑  收藏  举报