rt,个人感觉有点抽象
#include<bits/stdc++.h>
using namespace std;
struct node{
node *nxt;
int col,l,r,id;
node(int _l=0,int _r=0,int _col=0):
l(_l),r(_r),col(_col){;}
}*en[int(2e5)+1];
int n;
deque<node*>q;
int main(){
cin>>n;
int old=0,l=1,r=0,col=0,tot=0;
for(int x,i=1;i<=n;i++){
cin>>x;
if(i!=1&&x==col||i==1) r=i,col=x;
else {
node *now=new node;
now->l=l;now->r=r;now->col=col;now->id=++tot;
now->nxt=new node;now->nxt=NULL;
en[tot]=now;
q.push_back(now);
old=i,col=x,l=r=i;
}
}
node *op=new node;
op->l=l;op->r=r;op->col=col;op->id=++tot;
op->nxt=new node;op->nxt=NULL;
en[tot]=op;
q.push_back(op);
while(!q.empty()){
// for(auto i:q) cout<<i->l<<" "<<i->r<<" "<<i->col<<"\n";cout<<"\n";
int s=q.size();
int ol=-1,pos=0;
while(pos+1<=s){
pos++;
node *now=q.front();q.pop_front();
if(now->col==ol) {
en[q.back()->id]->nxt=now;
en[q.back()->id]=en[q.back()->id]->nxt;
continue;
}
cout<<now->l++<<" ";ol=now->col;
if(now->l>now->r&&now==en[now->id]) continue;
if(now->l>now->r) now=now->nxt;
q.push_back(now);
}
cout<<"\n";
}
return 0;
}