?
题意:n个数的数列,m次查询某个区间出现次数第k多的数出现的次数。n,m<=100000
?
解法:这个因为是离线的所以可以先统一处理,然后再输出。可以维护一个left和right指针,pre,pre[i]表示此时区间内出现次数大于等于i的数的种类。为了减少复杂度,关键是left和right的移动方式,即查询区间如何排序,如果紧靠区间左端点排序,那么右端点每次一定最大回是n,如果按照右端点排序,左端点每次一定最大是n。这里有个很好的处理办法,就是模糊排序,先左端点非严格排序,即除以sqrt(n)再排序,这样复杂度最大是n*sqrt(n)
?
代码:
/******************************************************
* @author:xiefubao
*******************************************************/
#pragma comment(linker, /STACK:102400000,102400000)
#include
#include
#include
#include
#include
#include
#include
#include
#include