1 solutions
-
0
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