测试点7和8超时
//链表
#include<bits/stdc++.h>
using namespace std;
int n;//总数
int tou=1;//链表开始指针
int cnt=1;//下标
int ans;
struct FRI{
int head,pre,nxt,lx;
//头指针 ,前一个与后一个,类型。
}fri[200005];
bool z[200005];
int main(){
scanf("%d",&n);
z[n+1]=1;
int shang=0;
fri[1].head=1;//初始化
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
if(i==1) shang=a;
else if(shang!=a){
fri[cnt].nxt=cnt+1;
++cnt;
fri[cnt].pre=cnt-1;
fri[cnt].head=i;
}
shang=a;
fri[cnt].lx=a;
}
while(ans<n){
int a=tou;
int shang=0;
while(fri[a].head!=0){
if(a!=tou&&fri[a].lx==shang){
a=fri[a].nxt;
continue;
}
if(z[fri[a].head]==1){
if(fri[a].pre==0) tou=fri[a].nxt;
fri[fri[a].pre].nxt=fri[a].nxt;
fri[fri[a].nxt].pre=fri[a].pre;
a=fri[a].nxt;
continue;
}
shang=fri[a].lx;
printf("%d ",fri[a].head);
z[fri[a].head]=1;
fri[a].head+=1;
a=fri[a].nxt;
ans++;
}
printf("\n");
}
return 0;
}
救救我吧,我实在是不知道怎么优化了。