#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MAX_N 80010
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int lo[MAX_N],v[MAX_N],co[MAX_N],ans[MAX_N];
int t[MAX_N<<2],n,s;
void build(int l,int r,int rt)
{
if(l==r)
{
t[rt]=1;
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
t[rt]=t[rt<<1]+t[rt<<1|1];
}
void add(int i,int l,int r,int rt)
{
int res;
if(l==r)
{
t[rt]=0;
ans[s]=l+1;
return ;
}
int m=(l+r)>>1;
if(i<t[rt<<1])
add(i,lson);
else
add(i-t[rt<<1],rson);
t[rt]=t[rt<<1]+t[rt<<1|1];
}
int main()
{
while(~scanf("%d",&n))
{
build(0,n-1,1);
for(int i=1;i<n;i++)
scanf("%d",&lo[i]);
for(int i=n-1;i>0;i--)
{
s=i;
add(lo[i],0,n-1,1);
}
s=0;
add(0,0,n-1,1);
for(int i=0;i<n;i++)
printf("%d\n",ans[i]);
}
}
poj 2182 线段树
最新推荐文章于 2021-03-04 12:48:28 发布