标签:sid unique bbb query upd quick first closed sed
E - K-th Number POJ - 2104
Input
Output
Sample Input
7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 7 3
Sample Output
5 6 3
Hint
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<sstream> #include<cmath> #include<stack> #include<cstdlib> #include <vector> #include<queue> using namespace std; #define ll long long #define llu unsigned long long #define INF 0x3f3f3f3f #define PI acos(-1.0) const int maxn = 1e5+5; const int mod = 1e9+7; int n,q,m,tot; int a[maxn],t[maxn],T[maxn],lson[maxn*30],rson[maxn*30],c[maxn*30]; void Init_hash() { for(int i=1;i<=n;i++) t[i] = a[i]; sort(t+1,t+1+n); m = unique(t+1,t+1+n)-t-1; } int build(int l,int r) { int root = tot++; c[root] = 0; if (l != r) { int mid = (l+r) >> 1; lson[root] = build(l,mid); rson[root] = build(mid+1,r); } return root; } int Hash(int x) { return lower_bound(t+1,t+1+m,x)-t; } int update(int root,int pos,int val) { int newroot = tot ++,tmp = newroot; c[newroot] = c[root] + val; int l = 1,r = m; while(l <r) { int mid = (l+r)>>1; if(pos <= mid) { lson[newroot] = tot++; rson[newroot] = rson[root]; newroot = lson[newroot]; root = lson[root]; r = mid; } else { rson[newroot] = tot ++; lson[newroot] = lson[root]; newroot = rson[newroot]; root = rson[root]; l = mid + 1; } c[newroot] = c[root] + val; } return tmp; } int query(int left_root,int right_root,int k) { int l = 1,r = m; while(l < r) { int mid = (l+r) >> 1; if(c[lson[left_root]] - c[lson[right_root]] >= k) { r = mid; left_root = lson[left_root]; right_root = lson[right_root]; } else { l = mid + 1; k -= c[lson[left_root]] - c[lson[right_root]]; left_root = rson[left_root]; right_root = rson[right_root]; } } return l; } int main() { scanf("%d%d",&n,&q); tot = 0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); Init_hash(); T[n+1] = build(1,m); for(int i=n;i;i--) { int pos = Hash(a[i]); T[i] = update(T[i+1],pos,1); } while(q--) { int l,r,k; scanf("%d%d%d",&l,&r,&k); printf("%d\n",t[query(T[l],T[r+1],k)]); } }
标签:sid unique bbb query upd quick first closed sed
原文地址:https://www.cnblogs.com/smallhester/p/10300566.html