문제
링크
풀이
#include <iostream>
#include <map>
using namespace std;
inline int calc1(const map<int, int> &mp, int k) {
int mex = 0;
for (auto &[x, c] : mp) {
if (x > mex || c <= k) break;
if (x == mex) mex++;
}
return mex;
}
inline int calc2(const map<int, int> &mp, int k) {
int mex = 0;
for (auto &[x, _] : mp) {
if (x == mex) mex++;
else if (x > mex) {
while (k > 0 && mex < x) {
k--;
mex++;
}
if (mex == x) mex++;
else if (mex < x) return mex;
}
}
return mex + k;
}
void solve(void) {
int n, k; cin >> n >> k;
map<int, int> mp;
while (n--) {
int a; cin >> a;
mp[a]++;
}
cout << calc1(mp, k) << "\n" << calc2(mp, k);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}