标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9646 | Accepted: 6207 |
Description
Input
Output
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3 1
Source
敲一遍代码:
1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<iostream> 7 #include<stack> 8 using namespace std; 9 #define size 8000 10 struct Node{ 11 int l,r,snum; 12 }; 13 Node node[size*4+5]; 14 int fir[size+5],brand[size+5]; 15 void build(int root,int l,int r){ 16 node[root].l=l; 17 node[root].r=r; 18 node[root].snum=r-l+1; 19 if(l==r){ 20 return; 21 } 22 int mid=(l+r)/2; 23 build(root*2,l,mid); 24 build(root*2+1,mid+1,r); 25 } 26 int query(int root,int k){ 27 node[root].snum--; 28 if(node[root].l==node[root].r){ 29 return node[root].l; 30 } 31 if(node[root*2].snum>=k){ 32 return query(root*2,k);//在根为root的树中可以使这个数成为第k个 33 } 34 else{ 35 return query(root*2+1,k-node[root*2].snum); 36 } 37 } 38 int main(){ 39 //freopen("D:\\INPUT.txt","r", stdin); 40 int n; 41 while(scanf("%d",&n)!=EOF){ 42 build(1,1,n); 43 int i=2; 44 fir[1]=0; 45 for(;i<=n;i++) scanf("%d",&fir[i]); 46 for(i=n;i>=1;i--){ 47 brand[i]=query(1,fir[i]+1); 48 } 49 for(i=1;i<=n;i++){ 50 cout<<brand[i]<<endl; 51 } 52 } 53 return 0; 54 }
标签:
原文地址:http://www.cnblogs.com/Deribs4/p/4374717.html