線性區間求第k大是乙個老生常談的問題,我們來總結下4種求解方法(當然遠不止這4種,老話說思想有多遠就能走多遠)。
這裡我們對每種方法的各種屬性進行乙個簡單評級(1-5,沒有任何倍數關係)
1:主席樹 (實現難度:2 時間消耗:2 空間消耗:4 )
2:整體二分 (實現難度:4 時間消耗:1 空間消耗:2 )
3:分塊 (實現難度:1 時間消耗:4 空間消耗:1 )
4:線段樹 (實現難度:3 時間消耗:4 空間消耗:4 )
總結:主席樹最實在價效比高;分塊也不錯畢竟思路簡單實現也不難;線段樹的話建議了解下不推薦使用;整體二分最難當然也「貨真價實」啦,時間空間都很給力,還可以處理帶修改的,好像連帶插入的也可以處理,缺點顯而易見:需要離線,且難寫難調!!
區間第k大
問題描述 給定乙個序列,每次詢問序列中第l個數到第r個數中第k大的數是哪個。輸入格式 第一行包含乙個數n,表示序列長度。第二行包含n個正整數,表示給定的序列。第三個包含乙個正整數m,表示詢問個數。接下來m行,每行三個數l,r,k,表示詢問序列從左往右第l個數到第r個數中,從大往小第k大的數是哪個。序...
區間第k大
歸併樹 include include include include include include include include include include include define ll long long define max x,y x y x y define min x,y ...
求區間第k大
int a mx void insert int a,int l,int r int divide int a,int l,int r 劃分子問題 a l x return l int select int s,int l,int r,int k,int len 返回s陣列l r的第k大數的下標 w...