链表处理,每次删除开头的元素
#include<bits/stdc++.h>
using namespace std;
#define M 200005
int n,beg=1,sum=1;
struct Node
{
int f,r=0,l=0;
bool flag=false;
};
Node F[M];
bool last[M];
int empty,next_num;
void del(const int &num)
{
F[F[num].l].r=F[num].r;
F[F[num].r].l=F[num].l;
F[num].l=0;F[num].r=0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&F[i].f);
F[i].r=i+1;
F[i].l=i-1;
}
while(1)
{
F[beg].flag=true;
for(int i=beg;F[i].r!=0;i=F[i].r)
{
if(F[i].f!=F[F[i].l].f) F[i].flag=true;
}
for(int i=beg;F[i].r!=0;i=next_num)
{
next_num=F[i].r;
if(F[i].flag)
{
del(i);
++empty;
printf("%d ",i);
}
}
printf("\n");
for(int i=1;i<=n;++i)
{
if(!F[i].flag)
{
beg=i;break;
}
}
if(empty==n) break;
}
return 0;