随手发个题解
2026-10-10 00:28:01
发布于:广东
10阅读
0回复
0点赞
#include<iostream>
using namespace std;
int le[200001],tp[200001],ba[200001],idx,ne[200001];
int main(){
int n,b,x=3,h=1,y,sum,c;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&b);
if(b==x) le[i-1]=i;
else le[i-1]=i-1,x=b,ba[idx]=i-1,tp[++idx]=i;
}
for(int i=1;i<idx;i++) ne[i]=i+1;
le[n]=n;
ba[idx]=n;
while(idx>0){
for(int i=h;i;i=ne[i]) printf("%d ",tp[i]);
x=c=0;
sum=2;
for(int i=h;i;i=ne[i]){
y=tp[i];
c=!c;
if(y==le[y]){
if(sum==2) h=ne[i];
ne[x]=ne[i];
idx--;
}
else{
tp[i]=le[y];
if(c==sum) le[ba[x]]=tp[i],ne[x]=ne[i],ba[x]=ba[i],idx--;
else x=i,sum=c;
}
}
ne[x]=0;
printf("\n");
}
return 0;
}
这里空空如也








有帮助,赞一个