1 solutions

  • 0
    @ 2024-12-5 18:13:42

    C++ :

    #include<iostream>
    #include<queue>
    using namespace std;
    const int N=2e5+10;
    #define int long long
    inline int fread(){
    	char ch=getchar();
    	int n=0,m=1;
    	while(ch<'0' or ch>'9'){
    		if(ch=='-'){
    			m=-1;
    		}
    		ch=getchar();
    	}
    	while(ch>='0' and ch<='9'){
    		n=(n<<3)+(n<<1)+ch-48;
    		ch=getchar();
    	}
    	return n*m;
    }
    int n,sum,a[N];
    bool flag[N];
    struct node{
    	int m,x,y;
    }z,p,q;
    queue<node>q1,q2;
    signed main(){
    	n=fread();
    	for(int i=1;i<=n;i++){
    		a[i]=fread();
    	}
    	a[n+1]=!a[n];
    	for(int i=2,j=1;i<n+2;i++){
    		if(a[i]!=a[i-1]){
    			q1.push((node){j,i-1,a[i-1]});
    			j=i;
    		}
    	}
    	sum=n;
    	while(sum){
    		while(q1.size()){
    			z=q1.front();
    			q1.pop();
    			while(flag[z.m] and z.m<=z.x){
    				z.m++;
    			}
    			if(z.m>z.x){
    				continue;
    			}
    			printf("%d ",z.m);
    			sum--;
    			flag[z.m]=true;
    			if(z.x==z.m){
    				continue;
    			}
    			z.m++;
    			q2.push(z);
    		}
    		puts("");
    		while(q2.size()){
    			q=q2.front(),q2.pop();
    			while(q2.size()){
    				p=q2.front();
    				if(p.y==q.y){
    					q.x=p.x,q2.pop();
    				}else{
    					break;
    				}
    			}
    			q1.push(q);
    		}
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    9129
    Time
    1000ms
    Memory
    512MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By