萌新刚学oi,10分求助
查看原帖
萌新刚学oi,10分求助
53769
北文楼主2021/10/29 13:21
#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;

int n, a[200005], cnt, k;
struct line{
	int l, r, x;
	queue<int>q;
}d[200005];
int main() {
//	freopen("fruit1.in","r",stdin);
//	freopen("fruit.out","w",stdout);
	scanf("%d", &n);
	a[0]=-1;
	for(int i=1; i<=n; i++) {
		scanf("%d", &a[i]);
		if(a[i]!=a[i-1]) {
			d[++cnt].l=cnt-1;
			d[cnt].r=cnt+1;
			d[cnt].x=0;
		}
		++d[cnt].x; d[cnt].q.push(i);
	}
	d[0].r=1;
	d[0].x=0;
	int sb=0;
	while(k<n) {
		int i=0;
		while(i<=cnt) {++sb;if(sb>1e7)return 0;
			if(d[i].q.empty()||d[i].x==0) {
				i=d[i].r;
				continue ;
			}
			++k;
			--d[i].x;
			printf("%d ", d[i].q.front());
			d[i].q.pop();
			if(d[d[i].l].x==0&&d[i].l!=0) {
				d[d[d[i].l].l].r=d[i].r;
				d[d[d[i].l].l].x+=d[i].x;
				d[i].x=0;
				while(!d[i].q.empty()) {
					d[d[d[i].l].l].q.push(d[i].q.front());
					d[i].q.pop();
				}
				d[d[i].r].l=d[d[i].l].l;
			}
			i=d[i].r;
		}
		printf("\n");
		
	}
	
	return 0;
}

顺便诉一下苦,普及有个0写成1挂了40分,提高t3本来写出了正解,结果用了move做变量名,爆零

2021/10/29 13:21
加载中...