80分求助
查看原帖
80分求助
67661
高质量小牛楼主2021/11/12 18:32
#include<bits/stdc++.h>
using namespace std;

struct RAGE{
	int x;
	int y;
	bool fruit;
	int pre;
	int next;
	int id;
};
RAGE a[200005];

int n;
int tot=0;
int sk[200005];

inline int qread()
{
	register int x=0;
	register char ch=getchar();
	while(ch<'0'||ch>'9')
		ch=getchar();
	while(ch>='0'&&ch<='9')
	{ 
		x=x*10+ch-'0'; 		
		ch=getchar();
	} 
	return x;
}

int main()
{
//	freopen("fruit.in","r",stdin);
//	freopen("fruit.out","w",stdout);
	n=qread();
	int x,l=-1;
	a[0].pre=-1;
	for(int i=1;i<=n;i++)
	{
		x=qread();
		if(x!=l)
		{
			a[tot].y=i-1;
			a[tot].next=tot+1;
			tot++;
			a[tot].id=tot;
			a[tot].x=i;
			a[tot].fruit=x;
			a[tot].pre=tot-1;
		}
		l=x;
	}
	a[tot].y=n;
	/*		
		int i=a[0].next;
		while(a[i].pre!=-1)
		{
			cout<<a[i].x<<" "<<a[i].y<<endl;
			i=a[i].next;
		}									
	*/
	int num=0;
	while(n)
	{
		int i=a[0].next;
		printf("%d ",a[i].x);
		n--;
		a[i].x++;
		if(a[i].x>a[i].y)
		{
			num++;
			sk[num]=a[i].id;
		}
		i=a[i].next;
		while(a[i].pre!=-1)
		{
			if(a[i].fruit!=a[a[i].pre].fruit)
			{
				printf("%d ",a[i].x);
				n--;
				a[i].x++;
				if(a[i].x>a[i].y)
				{
					num++;
					sk[num]=a[i].id;
				}
			}
			i=a[i].next;
		}
		while(num)
		{
			int l=a[sk[num]].pre,r=a[sk[num]].next;
			a[l].next=a[r].id;
			if(a[r].pre!=-1)
				a[r].pre=a[l].id;
			num--;
		}
		printf("\n");
	}
	return 0;
}
2021/11/12 18:32
加载中...