代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int r,l;
int v,xb;
}s[200010];
int vis[200010],k,n,cnt;
void into(int k,int a,int x){
++cnt;
s[cnt].xb=x;
s[cnt].v=a;
int kr=s[k].r;
s[k].r=cnt;
s[cnt].l=k;
s[cnt].r=kr;
s[kr].l=cnt;
}
void de(int k){
int kl=s[k].l;
int kr=s[k].r;
s[kl].r=kr;
s[kr].l=kl;
}
int main(){
scanf("%d",&n);
s[0].v=-1;
s[0].r=n+1;
s[n+1].v=2;
s[n+1].l=0;
for(int i=1;i<=n;i++){
scanf("%d",&k);
into(i-1,k,i);
}
while(s[0].r!=n+1){
int t=0;
for(int i=s[0].r;i!=n+1;i=s[i].r)
if(s[i].v!=s[s[i].l].v) vis[++t]=i;
for(int i=1;i<=t;i++){
printf("%d ",s[vis[i]].xb);
de(vis[i]);
}
printf("\n");
}
}