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
",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
原文地址:https://www.cnblogs.com/ITUPC/p/5378163.html