题解:P10522 [XJTUPC2024] 雪中楼
维护一个链表
对于每一次观察,有两种情况:
若
若
最后将
Code
#include <iostream>
using namespace std;
int pre[200010],nxt[200010];
int main(){
int n,f=1,l=1;//f代表当前高度最高的楼编号,l代表最低的楼编号
cin>>n;
for(int i=1;i<=n;i++){
int t;
cin>>t;
if(t==0){
pre[i]=l;
nxt[l]=i;
l=i;
}
else{
if(pre[t]==0){
f=i;
nxt[i]=t;
}
else{
nxt[pre[t]]=i;
pre[i]=pre[t];
pre[t]=i;
nxt[i]=t;
}
}
}
int cur=l;//当前输出的楼编号
for(int i=0;i<n;i++){
cout<<cur<<" ";
cur=pre[cur];
}
}