题解:P10522 [XJTUPC2024] 雪中楼
Strange_qwq · · 题解
每次输入一个
因为既然左边的房子都已经构造好了。那么右边的房子不影响左边的答案,因此可以增量构造。考虑
code
#include <bits/stdc++.h>
#using namespace std;
int f[200005];
int g(int u){
if(f[u]==u){
return u;
}
return f[u]=g(f[u]);
}
int a[200005];
int next[200005];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",a+i);
}
for(int i=1;i<=n;++i){
f[i]=i;
}
for(int i=n;i;--i){
int x=g(a[i]);
next[x]=i;
f[x]=i;
}
int k=n;
while(a[k]!=0) --k;
while(k){
printf("%d ",k);
k=next[k];
}
return 0;
}