區間第k大(4種求法)

2021-08-08 17:37:30 字數 404 閱讀 7994

線性區間求第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...