CodeForces 660C Hard Process
2016-04-24 18:52
225 查看
预处理前缀和+枚举起点+二分终点。
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int maxn=300000+10; int n,k; int a[maxn],sum[maxn]; int work(int st) { int l=st,r=n; int res=-1; while(l<=r) { int mid=(l+r)/2; if(sum[mid]-sum[st-1]<=k) { res=mid; l=mid+1; } else r=mid-1; } return res; } int main() { scanf("%d%d",&n,&k); for(int i=1; i<=n; i++) scanf("%d",&a[i]); if(a[1]==0) sum[1]=1; for(int i=2; i<=n; i++) { sum[i]=sum[i-1]; if(a[i]==0) sum[i]++; } int ans=0; int L,R; int flag=0; for(int i=1; i<=n; i++) { int tmp=work(i); if(tmp==-1) continue; if(tmp-i+1>ans) { ans=tmp-i+1; L=i; R=tmp; flag=1; } } if(flag==0) { printf("%d\n",0); for(int i=1; i<=n; i++) printf("%d ",a[i]); printf("\n"); } else { printf("%d\n",ans); for(int i=1; i<L; i++) printf("%d ",a[i]); for(int i=L; i<=R; i++) printf("1 "); for(int i=R+1; i<=n; i++) printf("%d ",a[i]); printf("\n"); } return 0; }
相关文章推荐
- Dialog 对话框
- C++ primer第二节笔记
- Toast
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 A题 换瓶盖
- numpy 中array参数'f'与order='f'区别
- Struts多个文件上传
- 构建之法阅读笔记04
- 【转载】Gradle学习 第十章:网络应用快速入门
- Android控件SeekBar
- Gallery&自定义适配器
- Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件
- HDU 5640 King's Cake
- 滚动控件ScrollView
- JSP中如何 循环显示 数据库中的数据到list.jsp页面 (转载)
- Android的页面管理控件ViewFlipper
- jQuery EasyUI 中EasyLoader加载器
- angular 指令@、=、&的用法和区别
- 深入理解okio的优化思想
- K 均值聚类算法-C#
- 小酌重构系列[1]——移动方法