#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;
int n, a[200005], cnt, k;
struct line{
int l, r, x;
queue<int>q;
}d[200005];
int main() {
// freopen("fruit1.in","r",stdin);
// freopen("fruit.out","w",stdout);
scanf("%d", &n);
a[0]=-1;
for(int i=1; i<=n; i++) {
scanf("%d", &a[i]);
if(a[i]!=a[i-1]) {
d[++cnt].l=cnt-1;
d[cnt].r=cnt+1;
d[cnt].x=0;
}
++d[cnt].x; d[cnt].q.push(i);
}
d[0].r=1;
d[0].x=0;
int sb=0;
while(k<n) {
int i=0;
while(i<=cnt) {++sb;if(sb>1e7)return 0;
if(d[i].q.empty()||d[i].x==0) {
i=d[i].r;
continue ;
}
++k;
--d[i].x;
printf("%d ", d[i].q.front());
d[i].q.pop();
if(d[d[i].l].x==0&&d[i].l!=0) {
d[d[d[i].l].l].r=d[i].r;
d[d[d[i].l].l].x+=d[i].x;
d[i].x=0;
while(!d[i].q.empty()) {
d[d[d[i].l].l].q.push(d[i].q.front());
d[i].q.pop();
}
d[d[i].r].l=d[d[i].l].l;
}
i=d[i].r;
}
printf("\n");
}
return 0;
}
顺便诉一下苦,普及有个0写成1挂了40分,提高t3本来写出了正解,结果用了move做变量名,爆零