P9202
部分说明转载自 P9199 题解。
考虑贪心求解。
显然,假如一段中缺少了任何一个
或者
判断成不成立可以考虑用 set。
上一篇题解是先推满然后删除的,空了说明需要修改。
可是这题
所以我们应该先清空,再推进去,凑够
每次修改改成
还有就是不要把
#include<bits/stdc++.h>
using namespace std;
#define gc getchar
#define pc putchar
#define W while
#define I inline
#define int long long
namespace SlowIO{
I int read() {
int x = 0, f = 1; char ch = gc();
W(ch < '0' || ch > '9') {if(ch == '-') f = -f; ch = gc();}
W(ch >= '0' && ch <= '9') x = x * 10 + (ch ^ 48), ch = gc();
return x * f;
}
I void Read(int &x) {x = read();}
I void write(int x) {
if(x < 0) pc('-'), x = -x;
if(x > 9) write(x / 10);
pc(x % 10 + '0');
}
I void Write(int x) {write(x); pc(' ');}
} using namespace SlowIO;
const int N = 1000010;
int n, k; int a[N], cnt[N]; set<int> st;
signed main() {
cin >> n >> k; int ans = 0;
for(int i = 1; i <= n; i++) Read(a[i]);
for(int i = 1; i <= n; i++) {
if(a[i] == k) {
st.clear();
continue;
}
if(a[i] < k) st.insert(a[i]);
if(st.size() == k) {
ans++; a[i] = k;
st.clear();
}
}
cout << ans << endl;
for(int i = 1; i <= n; i++) Write(a[i]);
return 0;
}