Codeforces Round 1133 (Div. 1, Div. 2) is coming soon! Register here. ×

2226 -— C 
Difference between en1 and en2, changed 5 character(s)
nlogn approach for the awesome problem **2226C**. Binary search the answer.↵
↵
~~~~~↵
bool check_k(int a[], int n, int k) {↵
    vector<int> leftover;↵
    vector<int> mex(k, 0);↵
↵
    for (int i = 0; i < n; i++)↵
        if (a[i] < k && !mex[a[i]])↵
            mex[a[i]] = 1;↵
        else↵
            leftover.push_back(a[i]);↵
↵
    int i = 0, j = 0;↵
    while (i < k && j < leftover.size()) {↵
        while (i < k && mex[i]) i++;↵
↵
        if (i < k && leftover[j] > 2 * i) mex[i] = 1;↵
        j++;↵
    }↵
    while (i < k && mex[i]) i++;↵
↵
    return i == k;↵
}↵
↵
int main() {↵
    std::ios::sync_with_stdio(false);↵
    cin.tie(nullptr);↵
↵
    int t;↵
    cin >> t;↵
↵
    while (t--) {↵
        int n;↵
        cin >> n;↵
↵
        int a[n];↵
        for (int& x : a) cin >> x;↵
        std::sort(a, a + n);↵
↵
        int l = 1, r = n;↵
        while (l <= r) {↵
            int k = (l + r) / 2;↵
            bool res = check_k(a, n, k);↵
↵
            if (res)↵
                l = k + 1;↵
            else↵
                r = k - 1;↵
        }↵
↵
        cout << r << endl;↵
    }↵
}↵
~~~~~↵
↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English sizan147 2026-09-02 07:28:59 5 Tiny change: ' answer.\n~~~~~\nb' -> ' answer.\n\n~~~~~\nb'
en1 English sizan147 2026-09-02 07:28:15 1123 Initial revision (published)