标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9536 | Accepted: 6146 |
Description
Input
Output
Sample Input
5 1 2 1 0
Sample Output
2 4 5 3 1
Source
1 #include <cstdio> 2 #include<algorithm> 3 #include<iostream> 4 #include<string> 5 #include<cstring> 6 #include<stack> 7 using namespace std; 8 #define N 8000 9 struct node{ 10 int l,r,num; 11 }; 12 node tree[3*N]; 13 int ans[N+5]; 14 void build(int num,int l,int r){//建线段树 15 tree[num].num=r-l+1; 16 tree[num].l=l; 17 tree[num].r=r; 18 if(l==r){//到根节点 19 //cout<<" "<<l<<endl; 20 return; 21 } 22 int mid=(l+r)>>1; 23 build(num<<1,l,mid); 24 build(num<<1|1,mid+1,r); 25 } 26 int update(int num,int be){//更新 27 tree[num].num--; 28 if(tree[num].l==tree[num].r){ 29 return tree[num].l; 30 } 31 if(tree[num<<1].num>=be){ 32 return update(num<<1,be); 33 } 34 else{ 35 return update(num<<1|1,be-tree[num<<1].num); 36 } 37 } 38 int main(){ 39 int n; 40 cin>>n; 41 int i; 42 ans[0]=0; //第一个前面有0个 43 for(i=1;i<n;i++){ 44 scanf("%d",&ans[i]); 45 } 46 build(1,1,n); 47 for(i=n-1;i>=0;i--){ 48 ans[i]=update(1,ans[i]+1); 49 } 50 for(i=0;i<n;i++){ 51 cout<<ans[i]<<endl; 52 } 53 return 0; 54 }
标签:
原文地址:http://www.cnblogs.com/Deribs4/p/4307859.html