30pts,没能看出问题,求调
查看原帖
30pts,没能看出问题,求调
741676
Usstzqqch_Iroha楼主2024/9/26 22:25
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200005;
struct node{
	int sze=0,val,lft;
};
queue<pair<int,pair<int,int> > > q;
node sv[maxn];
int cnt=0,flag=1;
int a[maxn];
int main(){
//	freopen("fruit.in","r",stdin);
//	freopen("fruit.out","w",stdout);
	int n;
	scanf("%d",&n);
	for(int i=1;i<=maxn;i++)
		a[i]=-1;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	int cnt=0,sze=0,l;
	for(int i=1;i<=n;i++){
		if(flag==1){
			l=i;
			flag=0;
		}
		if(a[i]!=a[i+1])
		{
			sze++;
			//cout<<sze<<' '<<a[i]<<'\n';
			q.push(make_pair(sze,make_pair(a[i],l)));
			sze=0;
			flag=1;
		}
		else sze++;
	}
	node sc;
	while(n){
		cnt=0;
		while(!q.empty()){
		sc.sze=q.front().first;
		sc.val=q.front().second.first;
		sc.lft=q.front().second.second;
		printf("%d ",sc.lft);
		q.pop();
		if(sc.sze<=1) n--;
		else{
			n--;
			sv[++cnt].sze=sc.sze-1;
			sv[cnt].val=sc.val;
			sv[cnt].lft=sc.lft+1;
		}
		}
		cout<<endl;
		for(int i=1;i<cnt;i++)
		{
			if(sv[i].val==sv[i+1].val){
				sv[i+1].sze+=sv[i].sze;
				sv[i].sze=0;
				sv[i+1].lft=sv[i].lft;
			}
		}
		for(int i=1;i<=cnt;i++)
		{
			if(sv[i].sze!=0) q.push(make_pair(sv[i].sze,make_pair(sv[i].val,sv[i].lft)));
		}
	}
}
2024/9/26 22:25
加载中...