标签:tab har win question pre mac pos i++ ati
完成新成就——B站上看了算法https://www.bilibili.com/video/av4619406/?from=search&seid=17909472848554781180#page=2
Time Limit: 20000MS | Memory Limit: 65536K | |
Total Submissions: 60158 | Accepted: 21054 | |
Case Time Limit: 2000MS |
Description
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<iostream> #include<cstdio> #include<algorithm> #include<vector> #define maxn 100006 using namespace std; int n,m,cnt,a[maxn],root[maxn],x,y,k; struct note{ int l,r,sum; }T[maxn*40]; vector<int> v; int getid(int x){return lower_bound(v.begin(),v.end(),x)-v.begin()+1;} void update(int l,int r,int &x,int y,int pos) { T[++cnt]=T[y];T[cnt].sum++;x=cnt; if(l==r) return; int mid=(l+r)>>1; if(pos<=mid) update(l,mid,T[x].l,T[y].l,pos);else update(mid+1,r,T[x].r,T[y].r,pos); } int query(int l,int r,int x,int y,int k) { if(l==r) return l; int mid=(l+r)/2; int sum=T[T[y].l].sum-T[T[x].l].sum; if(sum<k)return query(mid+1,r,T[x].r,T[y].r,k-sum);else return query(l,mid,T[x].l,T[y].l,k); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]),v.push_back(a[i]); sort(v.begin(),v.end()),v.erase(unique(v.begin(),v.end()),v.end()); for(int i=1;i<=n;i++) update(1,n,root[i],root[i-1],getid(a[i])); for(int i=1;i<=m;i++) { scanf("%d %d %d",&x,&y,&k); printf("%d\n",v[query(1,n,root[x-1],root[y],k)-1]); } return 0; }
标签:tab har win question pre mac pos i++ ati
原文地址:http://www.cnblogs.com/dancer16/p/7496652.html