<小熊的果篮>p7912求助
查看原帖
<小熊的果篮>p7912求助
290947
after_dream楼主2023/10/16 19:02
#include <bits/stdc++.h>
using namespace std;
int n,i,a[200002],t,d,st;
struct piece
{
	int start,end,next,left,zhi;
}q[200001];
bool used[200002];
int main()
{
	//freopen("fruit.in","r",stdin);
	//freopen("fruit.out","w",stdout);
	//ios::sync_with_stdio(0);
	//cin.tie(0); cout.tie(0);
	cin>>n;
	for(i=1; i<=n; i++) cin>>a[i],cout<<i<<endl;
	a[n+1]=1^a[n];
	t=1;
	q[1].start=1;
	q[1].zhi=a[1];
	for(i=2; i<=n+1; i++)
	if(a[i]!=a[i-1])
	{
		q[t].end=i-1;
		t++;
		q[t].start=i;
		q[t].zhi=a[i];
	}
	t--;
	for(i=1; i<=t; i++) q[i].left=i-1;
	q[t].next=-1;
	for(i=0; i<t; i++) q[i].next=i+1;
	while(d<n)
	{
		i=0;
		bool f=0;
		do
		{
			i=q[i].next;
			if(q[i].start<=n)
			{
				cout<<q[i].start<<" ";
				used[q[i].start]=1;
				d++;
				q[i].start++;
			}
			if(q[i].start>q[i].end && q[i].next!=-1)
			{
				q[q[i].next].left=q[i].left;
				q[q[i].left].next=q[i].next;
				f=1;
			}
			if(q[i].start>q[i].end && q[i].next==-1) q[q[i].left].next=-1;
			while(used[q[i].start] && q[i].start<q[i].end) q[i].start++; 
		}while(q[i].next!=-1);
		cout<<endl;
		if(f)
		{
			i=0;
			if(q[0].next==-1) break;
			do
			{
				i=q[i].next;
				if(q[i].next==-1) break;
				while(q[q[i].next].zhi==q[i].zhi)
				{
					q[q[q[i].next].next].left=i;
					q[i].end=q[q[i].next].end;
					q[i].next=q[q[i].next].next;
				}
			}while(q[i].next!=-1);
		}
	}
}
2023/10/16 19:02
加载中...