您的位置:首页 > 其它

Codeforces 660 C. Hard Process (尺取)

2016-08-15 13:29 435 查看
题目链接:http://codeforces.com/problemset/problem/660/C

尺取法

#include <bits/stdc++.h>
using namespace std;
int main()
{
static int num[int(3e5 + 5)];
int n, k;
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; ++i) {
scanf("%d", num + i);
}
int l = 1, res = 0, cnt = 0, flagl = 0, flagr = -1;
for(int i = 1; i <= n; ++i) {
if(num[i]) {
if(i - l + 1 > res) {
res = i - l + 1, flagl = l, flagr = i;
}
} else {
cnt++;
while(cnt > k && l <= i) {
if(!num[l++])
--cnt;
}
if(i - l + 1 > res) {
res = i - l + 1, flagl = l, flagr = i;
}
}
}
for(int i = flagl; i <= flagr; ++i)
num[i] |= 1;
printf("%d\n", res);
for(int i = 1; i <= n; ++i) {
printf("%d%c", num[i], i == n ? '\n': ' ');
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: