主席树(静态区间第k大)
Posted 无尽的蓝黄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主席树(静态区间第k大)相关的知识,希望对你有一定的参考价值。
前言
如果要求一些数中的第k大值,怎么做?
可以先就这些数离散化,用线段树记录每个数字出现了多少次。
。。。
那么考虑用类似的方法来求静态区间第k大。
原理
假设现在要有一些数
我们可以对于每个数都建一棵新的线段树,用来记录出现每个数字出现了多少次的前缀和。
那么假设要求区间[l,r]的第k大,将第r棵线段树减去第l-1棵线段树,像上面求所有数的第k大一样来求就可以了。
但是,对于每一个数都建一个线段树显然会爆空间。
现在考虑如何节约空间。
假设现在有四个数1 4 2 3,依次加入,可以这样处理
红色线是连到前一棵树的
由图得,原理就是:
对于每个被修改的位置,新建一个点。而没有被修改的点与修改前的线段树上的点共用。
以上是关于主席树(静态区间第k大)的主要内容,如果未能解决你的问题,请参考以下文章
ZOJ -2112 Dynamic Rankings 主席树 待修改的区间第K大