权值线段树
什么是权值线段树
权值线段树是线段树的一种,但是它与线段树不同;
线段树的每个结点是用来维护一段区间的最大值或总和;
而权值线段树的每个结点储存的一段区间有多少个数;
权值线段树有什么用
权值线段树主要用来查询区间第k大或者第k小的值;权值线段树的构建与查询
现在有一个数组x[10]={1,5,3,2,4,8,3,2,1,1};
对数组排序后为x[10]={1,1,1,2,2,3,3,4,5,8};
每个数的个数如下:
1:3
2:2
3:2
4:1
5:1
8:1
构建权值线段树如下图
1出现了3次,所以[1,1]为3,2出现了2次,所以[2,2]为2,[1,2]为3+2=5……
现在我们想要查询区间[1,8]第6大的数,操作如下
[1,8]区间上有10个数,左孩子有8个,右孩子有2个,8>6,所以向左子