Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define rep(i, a, b) for(int i = (a); i <= (b); ++i)
  3. #define per(i, a, b) for(int i = (a); i >= (b); --i)
  4. #define debug(x) cerr << #x << ' ' << x << endl;
  5. using namespace std;
  6.  
  7. typedef long long ll;
  8. const int MAXN = 2e5 + 7;
  9.  
  10. vector<int> v;
  11. int a[MAXN];
  12. int get_id(int x){
  13. return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;
  14. }
  15.  
  16. struct PST{
  17. int roots[MAXN], cnt;
  18. struct node{
  19. int ls, rs, val;
  20. }s[MAXN * 30];
  21.  
  22. void upd(int l, int r, int &newrt, int rt, int v){
  23. s[++cnt] = s[rt]; s[cnt].val++; newrt = cnt;
  24. if(l == r) return;
  25. int mid = (l+r)>>1;
  26. if(v <= mid) upd(l, mid, s[newrt].ls, s[rt].ls, v);
  27. else upd(mid+1, r, s[newrt].rs, s[rt].rs, v);
  28. }
  29.  
  30. int get(int l, int r, int newrt, int oldrt, int k){
  31. if(l == r) return v[l-1];
  32. int sum = s[s[newrt].ls].val - s[s[oldrt].ls].val;
  33. int mid = (l+r)>>1;
  34. if(sum >= k) return get(l, mid, s[newrt].ls, s[oldrt].ls, k);
  35. else return get(mid+1, r, s[newrt].rs, s[oldrt].rs, k - sum);
  36. }
  37. }pst;
  38.  
  39. int main() {
  40. int T;
  41. scanf("%d", &T);
  42. while(T--){
  43. int n, m;
  44. scanf("%d %d", &n, &m);
  45. rep(i, 1, n){
  46. scanf("%d", &a[i]);
  47. v.push_back(a[i]);
  48. }
  49.  
  50. sort(v.begin(), v.end());
  51. v.erase(unique(v.begin(), v.end()), v.end());
  52.  
  53. int len = v.size();
  54. pst.cnt = 0; pst.roots[0] = 0;
  55. rep(i, 1, n) pst.upd(1, len, pst.roots[i], pst.roots[i-1], get_id(a[i]));
  56.  
  57. int l, r, k;
  58. rep(i, 1, m){
  59. scanf("%d %d %d", &l, &r, &k);
  60. if(l > r) swap(l, r);
  61. printf("%d\n", pst.get(1, len, pst.roots[r], pst.roots[l-1], k));
  62. }
  63. }
  64. return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement