20wa 求助谢谢
查看原帖
20wa 求助谢谢
816504
封禁用户楼主2024/8/19 20:13
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct node
{
	int ki,l,r,next;
}a[N];
struct ty
{
	int last,next;
}sum[N];
void get(int x)
{
	int a=sum[x].last,b=sum[x].next;
	sum[a].next=b;
	sum[b].last=a;
}
int n;
int tot,tail,c[N];
void add(int k,int li,int ri)
{
	for(int i=li;i<=ri;i++)
	{
		sum[i].next=i+1;
		sum[i+1].last=i;
	}
	a[++tot]=(node){k,li,ri,tot+1};
	a[tail].next=tot;
	tail=tot;
}
int del()
{
	int las=0;
	for(int i=a[0].next;a[i].r<=n;i=a[i].next)
	{
//		printf("%d %d %d %d\n",i,a[i].l,a[i].r,a[i].next);
		printf("%d ",a[i].l);
		get(a[i].l);
		a[i].l=sum[a[i].l].next;
		if(a[i].l>a[i].r)
		{
			int u=las,v=a[i].next;
			sum[a[u].r].next=a[v].l;
			sum[a[v].l].last=a[u].r;
			if(a[las].ki!=a[v].ki)
			{
				a[u].next=a[i].next;
			}
			else
			{
				a[u].next=a[v].next;
				a[u].r=a[v].r;
			}
			
//			printf("     %d %d %d %d\n",u,a[u].l,a[u].r,a[u].next);
//			a[las].r=a[i].r;
		}
		else 
		{
			las=i;
		}
//		printf("     %d %d %d %d\n",i,a[i].l,a[i].r,a[i].next);
	}
	return las;
}
int main()
{
	scanf("%d",&n);
	tail=0;
	a[0]=(node){-1,0,0,0};
	sum[0].next=1;
	sum[0].last=0;
	int las=1;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&c[i]);
		if(i!=1&&c[i]!=c[i-1])
		{
			add(c[i-1],las,i-1);
			las=i;
		}
	}
	if(c[n]==c[n-1])
	{
		add(c[n],las,n);
	}	
	add(-1,n+1,n+1);
	while(del())
	{
		printf("\n");
	}
}
// 10 1 1 1 1 1 0 0 0 0 0  
2024/8/19 20:13
加载中...