从后往前插入序列来维护线段树,线段树记录区间的空位数。
线段树功能 :query:单点更新与查询
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define lc l,m,index<<1
#define rc m+1,r,index<<1|1
#define N 100005
int cnt[N<<2];
int ans[N];
int n;
void build(int l,int r,int index)
{
int m=(l+r)>>1;
cnt[index]=r-l+1;
if(l==r)return;
build(lc);
build(rc);
}
int query(int id,int l,int r,int index)
{
int m=(l+r)>>1;
cnt[index]--;
if(l==r)return l;
if(id>=cnt[index<<1])return query(id-cnt[index<<1],rc);
else return query(id,lc);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
int i;
ans[0]=0;
for(i=1;i<n;i++)scanf("%d",&ans[i]);
build(1,n,1);
for(i=n-1;i>=0;i--)ans[i]=query(ans[i],1,n,1);
for(i=0;i<n;i++)printf("%d\n",ans[i]);
}
return 0;
}