区间k大数怎么看都是一个比较重口味的东西,一不小心就要树套树,麻烦的代码,繁琐的调试,考场上性价比非常低
于是这个问题就一直搁置在这里
突然,划分树的亮相让人眼前一亮,优美的性质,漂亮的复杂度,简洁的代码,怎么看怎么好
好了,进入正题。
这个划分树的核心还是利用归并的思想,预处理出所有归并的中间结果,和s[i,j],第i层前j个进入左子树的元素个数,有了这个,就在每层都可以O(1)的判断当前区间k大数进入了左子树还是右子树
总的时间复杂度是预处理O(nlogn),询问O(logn)
值得一提的是,在更新的时候下标的转化相当繁琐,一定要想清楚(最好背下来)
还有一个关键的图,转自http://www.notonlysuccess.com/?p=142
附代码