10分求调
查看原帖
10分求调
1018403
Novelist_楼主2024/6/29 09:07

RT

#include<bits/stdc++.h>
using namespace std;
char buf[1<<20],*p1,*p2;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin), p1 == p2) ? 0 : *p1++)
template<typename T>inline void readT(T &x){
    bool f=1;x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-') f=!f;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=(f?x:-x);return;
}
template<typename T>
inline void writeT(T x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) writeT(x/10);
    putchar(x%10+'0');return;
}
struct k{
	int last,next;
	bool fruit,yes;
}a[200002];
int main()
{
//  freopen("fruit.in","r",stdin);
//  freopen("fruit.out","w",stdout);
  int i,n,len=0,cut[200002]={},t;
  readT(n);
  for(i=1;i<=n;++i)
  {
  	readT(a[i].fruit);
  	a[i].last=i-1;
  	a[i-1].next=i;
  }
  for(;len<n;)
  {
  	t=0;
  	for(i=n;i>=1;i=a[i].last)
  	if(!a[i].yes)
  	if(i==1||a[i].fruit!=a[a[i].last].fruit)
  	{
  	  a[i].yes=1;
  	  a[a[i].last].next=a[i].next;
  	  a[a[i].next].last=a[i].last;
  	  ++len;
  	  cut[++t]=i;
	}
	for(i=t;i>=1;--i)
	{
	  writeT(cut[i]);
	  putchar(' ');
	}
	putchar('\n');
  }
  return 0;
}
2024/6/29 09:07
加载中...