Only Premium Users can view the Question
In this problem, we are given an integer array a of size n and a non-negative integer m, representing the number of allowed insert operations. We define the MEX (Minimum Excluded Value) of an array as the smallest non-negative integer that is not present in the array.
Our goal is to compute the maximum possible MEX that can be achieved by inserting at most m non-negative integers (possibly duplicates) into the array a.
This problem is efficiently solved using a binary search on the value of the MEX. Instead of trying to construct every possible outcome, we ask the question:
 "Is it possible to achieve a MEX of at least X?"
 This allows us to binary search the maximum valid MEX.
Use a Set for Fast Lookup:
 Store all values of the array in an unordered set, allowing O(1) lookups to check if an integer is missing.
Define a Validity Function:
 For any candidate MEX x, count how many numbers in the range [0, x-1] are missing in the set. These are the numbers we would need to insert to make x a valid MEX.
 If the number of missing integers is ≤ m, then it is possible to make x the MEX.
Binary Search:
 Perform binary search in the range [0, n + m + 5] for the largest value x such that the validity function returns true.
Return the Maximum Valid MEX found.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll solution(int n, ll m, vector<int> a) {
    unordered_set<int> present(a.begin(), a.end());
    auto isValid = [&](ll x) {
        ll missing = 0;
        for (ll i = 0; i < x; ++i) {
            if (!present.count(i)) missing++;
        }
        return missing <= m;
    };
    ll low = 0, high = m + n + 5, ans = 0;
    while (low <= high) {
        ll mid = (low + high) / 2;
        if (isValid(mid)) {
            ans = mid;
            low = mid + 1;
        } else {
            high = mid - 1;
        }
    }
    return ans;
}
int main() {
    int n;
    ll m;
    cin >> n >> m;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
    }
    cout << solution(n, m, a) << endl;
    return 0;
}
Let X be the final maximum possible MEX value.
Time Complexity: O(X)
 For each binary search iteration, we check all values from 0 to X. This results in O(X log X) in the worst case. However, due to small constraints on m and n, this is efficient.
Space Complexity: O(n)
 An unordered set of size n is used to track the presence of integers in the original array.