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

附代码
划分树算法详解

本文介绍了一种名为划分树的数据结构及其应用。通过预处理实现快速查询区间k大数,具有O(nlogn)的预处理时间和O(logn)的查询时间。文章提供了详细的算法原理说明及其实现代码。
485

被折叠的 条评论
为什么被折叠?



