deque,结构体指针30分求助
查看原帖
deque,结构体指针30分求助
1127709
ppossible楼主2023/10/18 21:58

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;
}
2023/10/18 21:58
加载中...