60pts WA求调
查看原帖
60pts WA求调
718060
蒋辰逸楼主2024/10/2 11:28

4,5,8,9 too short

#include<bits/stdc++.h>
using namespace std;
int n;
int a[200010];
struct node{
	int start,num,pre,nxt,inxt,id,is;
	queue<int>son;
}lst[200010];
int lft;
int main(){ 
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n;
	lft=n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	a[n+1]=-1;
	queue<int>q;
	for(int i=1,j=1;i<=n;i++,j++){
		int ti=i;
		while(a[i]==a[i+1])i++;
		lst[j]={ti,i-ti+1,j-1,j+1,-1,0,a[i]};
		if(i==n)lst[j].nxt=-1;
		q.push(j);
	}
	lst[0]={0,0,-1,1,-1,0,-1};
	q.push(-1);
	int saki=-1,sakiid=-1;
	while(!q.empty()){
		int j=q.front();
		q.pop();
		if(j==-1){
			cout<<'\n';
			saki=-1;
			if(!q.empty())q.push(-1);
			continue;
		}
		if(lst[j].is==saki){
			if(lst[sakiid].id<lst[sakiid].num){
				lst[sakiid].son.push(j);
			}
			else{
				q.push(j);
				sakiid=j;
			}
			continue;
		}
		cout<<lst[j].start+lst[j].id<<' ';
		lst[j].id++;
		
		if(lst[j].id<lst[j].num){
			q.push(j);
		}
		else{
			if(!lst[j].son.empty()){
				q.push(lst[j].son.front());
				if(!lst[lst[j].son.front()].son.empty()){
					queue<int>t;
					t=lst[lst[j].son.front()].son;
					lst[j].son.pop();
					while(!lst[j].son.empty()){
						t.push(lst[j].son.front());
						lst[j].son.pop();
					}
				}
				else{
					lst[lst[j].son.front()].son=lst[j].son;
					lst[lst[j].son.front()].son.pop();
				}
			}
		}
		saki=lst[j].is;
		sakiid=j;
		lft--;
	}
//	cout<<lft<<endl;
	return 0;
}
2024/10/2 11:28
加载中...