這是個非常經典的主席樹入門題——靜態區間第k小
資料已經過加強,請使用主席樹。同時請注意常數優化
如題,給定n個整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。
第一行包含兩個正整數n、m,分別表示序列的長度和查詢的個數。
第二行包含n個整數,表示這個序列各項的數字。
接下來m行每行包含三個整數l, r, kl,r,k , 表示查詢區間[l, r][l,r]內的第k小值。
輸出包含k行,每行1個整數,依次表示每一次查詢的結果
輸入 #1
5 5輸出 #125957 6405 15770 26287 26465
2 2 1
3 4 1
4 5 1
1 2 2
4 4 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 #include4using
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行每行...