模板 可持久化線段樹 1(主席樹)

2022-05-08 01:33:09 字數 1914 閱讀 9886

這是個非常經典的主席樹入門題——靜態區間第k小

資料已經過加強,請使用主席樹。同時請注意常數優化

如題,給定n個整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。

第一行包含兩個正整數n、m,分別表示序列的長度和查詢的個數。

第二行包含n個整數,表示這個序列各項的數字。

接下來m行每行包含三個整數l, r, kl,r,k , 表示查詢區間[l, r][l,r]內的第k小值。

輸出包含k行,每行1個整數,依次表示每一次查詢的結果

輸入 #1

5 5

25957 6405 15770 26287 26465

2 2 1

3 4 1

4 5 1

1 2 2

4 4 1

輸出 #1

6405

15770

26287

25957

26287

樣例資料說明:

n=5,數列長度為5,數列從第一項開始依次為[25957, 6405, 15770, 26287, 26465 ]

第一次查詢為[2, 2]區間內的第一小值,即為6405

第二次查詢為[3, 4]區間內的第一小值,即為15770

第三次查詢為[4, 5]區間內的第一小值,即為26287

第四次查詢為[1, 2]區間內的第二小值,即為25957

第五次查詢為[4, 4]區間內的第一小值,即為26287

分析:

模板題???去tm的。。。一道模板題調我一晚上。。。(除了treap,樹剖外調的時間最長一道題目)

ps:目前調(不含第一遍寫的時間)的時間最久的(不看題解):

1.豬國殺??? 1個月 (還沒寫好。。。)

2.treap 4個小時

2.樹剖 4個小時

4.主席樹 3個小時

4.有機化學之神之偶爾會作弊 3個小時(神題。。。結合多種演算法。。)

6.網路流 2.5個小時

7.字串的展開 2個小時

7.牛繡花(你tm試試自己推這題的公式。。。) 2個小時

9.洛谷p1962 斐波那契數列(哼哼,你自己看看資料範圍) 1.5小時

9.[ahoi2009]中國象棋(你試試這題遞推方程。。。) 1.5小時

code:

1 #include2 #include3 #include4

using

namespace

std;

5const

int m=30000005;6

intp[m],a[m];

7int

n,m;

8int

rt[m],tot;

9struct

treenode[m];

12void build (int &rt,int l,int

r)19

int bsearch(int

k)27

return

l;28}29

void np(int &rt,int lst,int l,int r,int

val)

37int query(int rt1,int rt2,int l,int r,int

k)45

intread()

53while (c<='

9'&&c>='0'

) 57

return res*f;58}

59int

main()

75while (mm--)

80//

system("pause");

81return0;

82 }

模板 可持久化線段樹 1(主席樹)

題目背景 這是個非常經典的主席樹入門題 靜態區間第k小 資料已經過加強,請使用主席樹。同時請注意常數優化 題目描述 如題,給定n個正整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。輸入輸出格式 輸入格式 第一行包含兩個正整數n m,分別表示序列的長度和查詢的個數。第二行包含n個正整數,表示...

模板 可持久化線段樹 1(主席樹)

這是個非常經典的主席樹入門題 靜態區間第k小 資料已經過加強,請使用主席樹。同時請注意常數優化 如題,給定n個正整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。輸入格式 第一行包含兩個正整數n m,分別表示序列的長度和查詢的個數。第二行包含n個正整數,表示這個序列各項的數字。接下來m行每行...

模板 可持久化線段樹 1(主席樹)

這是個非常經典的主席樹入門題 靜態區間第k小 資料已經過加強,請使用主席樹。同時請注意常數優化 如題,給定n個正整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。輸入格式 第一行包含兩個正整數n m,分別表示序列的長度和查詢的個數。第二行包含n個正整數,表示這個序列各項的數字。接下來m行每行...