70分TLE蒟蒻求助
查看原帖
70分TLE蒟蒻求助
244175
Plex楼主2021/10/28 13:49

链表处理,每次删除开头的元素

#include<bits/stdc++.h>
using namespace std;
#define M 200005
int n,beg=1,sum=1;
struct Node
{
	int f,r=0,l=0;
	bool flag=false;
};
Node F[M];
bool last[M];
int empty,next_num;
void del(const int &num)
{
	F[F[num].l].r=F[num].r;
	F[F[num].r].l=F[num].l;
	F[num].l=0;F[num].r=0;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&F[i].f);
		F[i].r=i+1;
		F[i].l=i-1;
	}
	while(1)
	{
		F[beg].flag=true;
		for(int i=beg;F[i].r!=0;i=F[i].r)
		{
			if(F[i].f!=F[F[i].l].f) F[i].flag=true;
		}
		for(int i=beg;F[i].r!=0;i=next_num)
		{
			next_num=F[i].r;
			if(F[i].flag)
			{
				del(i);
				++empty;
				printf("%d ",i);
			}
		}
		printf("\n");
		for(int i=1;i<=n;++i)
		{
			if(!F[i].flag)
			{
				beg=i;break;
			}
		}
		if(empty==n) break;
	}
	return 0;

2021/10/28 13:49
加载中...