re4个点 求调
查看原帖
re4个点 求调
348938
joyskaka楼主2022/5/12 19:14
#include <bits/stdc++.h>
using namespace std;
struct node{
	vector<int> v;
	int l,r;
	node* nxt;
	node* pr;
	node():l(0),r(1),nxt(NULL),pr(NULL){}
} ;
node *start=new node;
int main()
{
	freopen("fruit3.in","r",stdin);
	int n,x,px,le=1,ri;
	scanf("%d%d",&n,&px);
	//存链表里 
	node *now=start;
	for(int i=2;i<=n;i++)
	{
		scanf("%d",&x);
		if(x!=px)
		{
			ri=i-1;
			node *t=new node;
			t->v.push_back(le);
			t->v.push_back(ri);
			t->l=0;
			t->r=1;
			now->nxt=t;
			t->pr=now;
			now=t;
			le=i;
			px=x;
		}
	}
	node *t=new node;
	t->v.push_back(le);
	t->v.push_back(n); 
	t->l=0;t->r=1;
	t->nxt=NULL;
	now->nxt=t;
	t->pr=now;
	
	now=start->nxt;
	int tot=0;
	node *pre;
	while(start->nxt!=NULL)
	{
		now=start->nxt;
		while(now!=NULL&&now->l > now->r)
		{
			now=now->nxt;
		}
		if(now==NULL) break;
		start->nxt=now;	
		pre=start;
		while(now)
		{
			int k=now->l;
			
			printf("%d ",now->v[k]);
			tot++;
			now->v[k]++;
			if(now->v[k] >now->v[k+1])
			{
				now->l+=2;
			}
			if(pre!=start && pre->l > pre->r)
			{
				if(pre->pr==start)
				{
					start->nxt=now;
					now->pr=start;
					pre=now;
					now=now->nxt;
					continue;						
				}
				for(int i=now->l;i<=now->r;i++)
				{
					pre->pr->v.push_back(now->v[i]);
				}
				if(now->r>now->l)
					pre->pr->r+= now->r - now->l + 1;
				pre->pr->nxt=now->nxt;
				now->nxt->pr=pre->pr;
				now=now->nxt;
				pre=pre->pr;
				continue;
			}
			if(now->nxt==NULL && now->l>now->r)
			{
				pre->nxt=NULL;
				now=now->nxt;
				break;
			}
			pre=now;
			if(now->nxt==NULL) break;
			now=now->nxt;
		}
		printf("\n");
	/*
		for(node *it=start->nxt;it;it=it->nxt)
		{
			printf("%d->",it->v[it->l]);
		}
		cout<<'\n';
	*/
		if(tot>=n) break;
	}
	return 0;
}
					
			
			
	
2022/5/12 19:14
加载中...