直接死循环......
#include<bits/stdc++.h>
#define re register int
#define rll register long long
using namespace std;
int n;
struct flsh
{
bool op;
int id;
};
flsh a[int(2e5+5)];
int bg[int(2e5+5)];
int zb[int(2e5+5)];
struct node
{
int f,e;
bool op;
};
vector<node> v;
inline void write(re x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
{
write(x/10);
}
putchar(x%10+'0');
}
bool data;
int main()
{
scanf("%d",&n);
for(re i=1;i<=n;i++)
{
scanf("%d",&data);
a[i].op=data;
a[i].id=i;
}
re pos=1;
bool b=a[1].op;
v.push_back({1,1,a[1].op});
while(pos<n)
{
pos++;
if(a[pos].op==b)
{
v.back().e++;
}
else
{
b=a[pos].op;
v.push_back({pos,pos,a[pos].op});
}
}
// for(re i=0;i<v.size();i++)
// {
// cout<<v[i].f<<" "<<v[i].e<<" "<<v[i].op<<"\n";
// }
re iter;
//int cnt=0;
while(!v.empty()/*&&cnt<100*/)
{//cnt++;
iter=0;
// cout<<v.size()<<" ";
for(re i=0;i<v.size();i++)
{
// cout<<i+1<<" "<<v[i].f<<" ";
// cout<<a[v[i].f].id<<"\n";
if(a[v[i].f].id!=-1)
{
zb[iter++]=a[v[i].f].id;
a[v[i].f].id=-1;
v[i].f++;
}
}
for(re i=0;i<v.size();i++)
{
if(v[i].f>v[i].e)
{
// cout<<i<<" "<<v[i].f<<" "<<v[i].e<<"\n";
// cout<<i-1<<" "<<v[i-1].f<<" "<<v[i-1].e<<"\n";
v.erase(v.begin()+i);
if(i<v.size()&&i-1>=0&&v[i].op==v[i-1].op)
{
// cout<<v[i].f<<" "<<v[i].e<<"\n";
v[i].f=v[i-1].f;
v.erase(v.begin()+i-1);
// cout<<v[i-1].f<<" "<<v[i-1].e<<"\n";
}
}
}
// cout<<endl<<"v.arr:\n";
// for(re i=0;i<v.size();i++)
// {
// cout<<v[i].f<<" "<<v[i].e<<" "<<v[i].op<<"\n";
// }cout<<endl<<endl<<endl;
// cout<<"\nans:\n";
for(re i=0;i<iter;i++)
{
cout<<" ";write(zb[i]);putchar(' ');
}
putchar('\n');
}
return 0;
}