#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int N=2e5+10;
int n;
struct node{
int num,vis;
}a[N],b[N];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].num);
a[i].vis=i;
}a[0].num=(a[1].num+1)%2;a[n+1].num=(a[n].num+1)%2;
while(1){
int top=0;
for(int i=1;i<=n;i++){
if(a[i].num!=a[i-1].num){
printf("%d ",a[i].vis);
}else{
b[++top].num=a[i].num;
b[top].vis=a[i].vis;
}
}
if(top==0) break;
for(int i=1;i<=top;i++){
a[i].num=b[i].num;
a[i].vis=b[i].vis;
}a[0].num=(a[1].num+1)%2;a[top+1].num=(a[top].num+1)%2;
printf("\n");n=top;
}
return 0;
}
最后三个点TLE,有 n2 或 nlogn 的做法吗?
求助 orz