标签:mod define line lease #define present root HERE abs
7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 7 3Sample Output
5 6 3Hint
#define ll long long const int maxn = 1e5+5; const int mod = 1e9+7; const double eps = 1e-9; const double pi = acos(-1.0); const int inf = 0x3f3f3f3f; int n, m; int pre[maxn]; int rank[maxn]; int cnt, ss; int root[maxn]; struct node { int l, r; int sum; }t[maxn*20]; void init(){ cnt = 1; root[0] = 0; t[0].l = t[0].r = t[0].sum = 0; } void update(int num, int &rt, int l, int r){ t[cnt++] = t[rt]; rt = cnt-1; t[rt].sum++; if (l == r) return; int m = (l+r)>>1; if (num <= m) update(num, t[rt].l, l, m); else update(num, t[rt].r, m+1, r); } int query(int i, int j, int k, int l, int r){ int d = t[t[j].l].sum - t[t[i].l].sum; int m = (l+r)>>1; if (l == r) return l; if (k <= d) return query(t[i].l, t[j].l, k, l, m); else return query(t[i].r, t[j].r, k-d, m+1, r); } int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); cin >> n >> m; for(int i = 1; i <= n; i++){ scanf("%d", &pre[i]); rank[i] = pre[i]; } sort(rank+1, rank+1+n); ss = unique(rank+1, rank+1+n)-rank; //printf("-- %d\n", cnt); init(); for(int i = 1; i <= n; i++){ int x = lower_bound(rank+1, rank+ss, pre[i])-rank; root[i] = root[i-1]; update(x, root[i], 1, n); } int a, b, c; for(int i = 1; i <= m; i++){ scanf("%d%d%d", &a, &b, &c); int ans = query(root[a-1], root[b], c, 1, n); printf("%d\n", rank[ans]); } return 0; }
标签:mod define line lease #define present root HERE abs
原文地址:https://www.cnblogs.com/ccut-ry/p/8831226.html