求助(玄关)
查看原帖
求助(玄关)
1199534
ycy1124楼主2024/5/5 13:37
#include<bits/stdc++.h>
using namespace std;
void read(int &x)
{
	int f=1;
	x=0;
	char ch=getchar();
	while((ch>'9'||ch<'0')&&ch!='-')
	{
		ch=getchar();
	}
	if(ch=='-')
	{
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x*=10;
		x+=ch-'0';
		ch=getchar();
	}
	x*=f;
}
struct gz{
	int l,r,kl,kr,lb,gs=0,tl,tr;
	bool pd=0,yt=0;
}a[int(2*1e5+1)];
int main()
{
	int n,t=1;
	read(n);
	int bj=1;
	for(int i=1;i<=n;i++)
	{
		read(a[i].lb);
		a[1].yt=1;
		if(a[i].lb!=a[bj].lb)
		{
			a[bj].kr=i;
			a[i].kl=bj;
			a[bj].tl=bj;
			a[bj].tr=i-1;
			bj=i;
		}
		else
		{
			if(i!=1)
			{
   				a[i].l=i-1;
  		 		a[i-1].r=i;
			}
			a[bj].gs++;
		}
	}
	while(n)
	{
		int bj=1;
		while(a[bj].gs<=0)
		{
			bj=a[bj].kr;
		}
		bj=a[bj].tl;
		while(bj!=0)
		{
			n--;
			a[bj].pd=1;
			printf("%d ",bj);
			a[bj].gs--;
			a[bj].tl=a[bj].r;
			if(a[bj].gs==0)
			{
				if(a[a[bj].kl].lb==a[a[bj].kr].lb)
				{
					a[a[bj].kl].kr=a[a[bj].kr].kr;
					a[a[a[bj].kr].kr].kl=a[bj].kl;
					a[a[bj].kl].gs+=a[a[bj].kr].gs;
					a[a[a[bj].kl].tr].r=a[a[bj].kr].tl;
					a[a[a[bj].kr].tl].l=a[a[bj].kl].tr;
				}
				else
				{
					a[a[bj].kl].kr=a[bj].kr;
					a[a[bj].kr].kl=a[bj].kl;
				}
			}
			else
			{
				a[a[bj].kr].kl=a[bj].r;
				a[a[bj].kl].kr=a[bj].r;
				a[a[bj].r].gs=a[bj].gs;
				a[a[bj].r].kl=a[bj].kl;
				a[a[bj].r].kr=a[bj].kr;
				a[a[bj].r].yt=a[bj].yt;
				a[bj].yt=0;
				a[bj].tr=0;
				a[bj].tl=0;
				a[bj].kr=0;
				a[bj].kl=0;
				a[bj].gs=0;
				bj=a[bj].r;
				a[bj].l=0;
			}
			bj=a[bj].kr;
		}
		printf("\n");
	}
	return 0;
}
2024/5/5 13:37
加载中...