題意: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