序:这是一篇迟到的题解,机房的小伙伴们系统地学主席树应该是七月份的时候,然而我没赶上趟,当时压根没看懂主席树是什么东东。 昨天晚上决定重新来过,于是请教了一位大神1113(这是他的博客,不过好像因为手机验证的原因很久没有更新了),他告诉我了主席树的始末,然后我就秒懂了,原来并没有想象中的那么复杂,相信看完了这篇题解,你也会这么觉得的。下面开始正文:
Description
给定一个长度为 n 的序列和
Solution
对于一个问题,我们一般采取的方法就是化繁为简,这样更容易分析题目的特点,然后逐个击破。对于问题中的
对于一个询问 (L,R,K) ,刚开始最容易想到的是二分答案,但是 check 的时候又不得不 O(n) 地扫一遍区间,总的复杂度就变成 O(nlogn) ,这显然不是很优。我们完全可以 O(n) 地求出第 k 大的值,我们可以先用计数的方法记下区间中每种数的个数(在这之前要先把整个数组离散化),然后从大到小维护一个