codeforces 660C Hard Process

维护一个左右区间指针就可以。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<queue>
 5 #include<stack>
 6 using namespace std;
 7 int main(){
 8     int n,m;
 9     int a[300010];
10     while(~scanf("%d%d",&n,&m)){
11         for(int i=1;i<=n;i++)
12             scanf("%d",&a[i]);
13     int l,r,k,rr,ll;
14     l=1,r=0,rr=-1,ll=0,k=0;
15         while(r<=n){
16            if(rr-ll<r-l){
17               rr=r;
18               ll=l;
19            }  
20            if(a[++r]==0){
21               k++;
22            }
23            while(k>m){
24             if(a[l++]==0){
25                 k--;
26             }
27            }
28         }
29     printf("%d\n",rr-ll+1);
30     for (int i = ll; i <= rr ; ++i)
31     {
32         /* code */
33         a[i]=1;
34     }
35     for(int i=1;i<=n;i++){
36         printf("%d ",a[i]);
37     }
38     }
39     return 0;
40 }
View Code

 

posted @ 2016-04-11 14:06  yyblues  阅读(203)  评论(0编辑  收藏  举报