#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define MAXN 100005using namespace STD;typedef Long Longllstructnode{intLS, RS, sum;} p[maxn* -];intA[MAXN], B[MAXN], ROOT[MAXN], tot;intBuild (intLintR) {intRT = tot++; P[rt].sum =0;if(L = = r)returnRtintMid = (L + r) >>1; P[rt].ls = Build (L, mid); p[rt].rs = Build (mid+1, R);returnRT;}intUpdate (intXintDintIintLintR) {intRT = tot++; P[RT] = P[i]; P[rt].sum + = D;if(L = = r)returnRtintMid = (L + r) >>1;if(x <= mid) P[rt].ls = Update (x, D, P[rt].ls, L, mid);Elsep[rt].rs = Update (x, D, P[rt].rs, mid+1, R);returnRT;}intQuery (intIintJintKintLintR) {if(L = = r)returnB[L];intMid = (L + r) >>1;inth = p[p[i].ls].sum-p[p[j].ls].sum;if(H < k)returnQuery (p[i].rs, p[j].rs, K-h, mid+1, R);returnQuery (P[i].ls, P[j].ls, K, L, mid); }intMain () {//Freopen ("In.txt", "R", stdin); intTscanf("%d", &t); while(t--) {tot =0;intN, M;scanf("%d%d", &n, &m); for(inti =1; I <= N; i++) {scanf("%d", a+i); B[i] = A[i]; } sort (b +1, B +1+N);inttt = unique (b +1, B +1+N)-B-1; root[0] = Build (1, TT);intS, T, K; for(inti =1; I <= N; i++) {intD = Lower_bound (b +1, B +1+tt, A[i])-B; Root[i] = Update (d,1, root[i-1],1, TT); } for(inti =1; I <= m; i++) {scanf("%d%d%d", &s, &t, &k);intD = Query (Root[t], root[s-1], K,1, TT);printf("%d\n", d); } }return 0;}
HDOJ-2665 Kth Number