如果最后一头奶牛前面有
如果倒数第二头前面有
1.如果
2.如果
依此类推,如果第
具体来说,我们建立一个长度为
1.查询序列
2.把
然后我们如果想查询身高,就直接对
#include<stdio.h>
int n,a[8010],tree[8010];
int vis[8010],ans[8010];
int lowbit(int x)
{
return x&(-x);
}
void update(int x,int val)
{
for(int i=x;i<=n;i+=lowbit(i))
tree[i]+=val;
}
int ask(int x)
{
int ans=0;
for(int i=x;i;i-=lowbit(i))
ans+=tree[i];
return ans;
}
int two_devide(int x)
{
int l=1,r=n;
while(l<=r)
{
int mid=(l+r)>>1;
if(ask(mid)<x)
l=mid+1;
else
r=mid-1;
}
return l;
}
int main()
{
scanf("%d",&n);
for(int i=2;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
update(i,1);
for(int i=n;i>=2;i--)
{
ans[i]=two_devide(a[i]+1);
vis[ans[i]]=1;
update(ans[i],-1);
}
for(int i=1;i<=n;i++)
if(!vis[i])
{
printf("%d\n",i);
break;
}
for(int i=2;i<=n;i++)
printf("%d\n",ans[i]);
return 0;
}