Submission #139105

#TimeUsernameProblemLanguageResultExecution timeMemory
139105mlyean00Zalmoxis (BOI18_zalmoxis)C++14
95 / 100
1014 ms35204 KiB
#ifdef DEBUG
#include "debug.hpp"
#else
#pragma GCC optimize("Ofast")
#define trace(...)
#include <bits/stdc++.h>
#define endl '\n'
#endif

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n, k;
    cin >> n >> k;

    list<int> a;
    int rem = 1 << 30;
    for (int i = 0; i < n; ++i) {
        int tmp;
        cin >> tmp;
        a.push_back(tmp);
        rem -= 1 << tmp;
    }

    vector<list<int>::iterator> expand;

    unsigned int st = 1 << 30;
    for (auto it = a.begin(); it != a.end(); ++it) {
        int h = __builtin_ctz(st);
        if (*it < h) {
            st |= 1 << *it;
        } else if (*it == h) {
            st += 1 << *it;
        } else {
            rem -= 1 << h;
            it = a.insert(it, h);
            expand.push_back(it);
            st += 1 << h;
        }
    }

    for (int h = __builtin_ctz(st); h < 30; h = __builtin_ctz(st)) {
        rem -= 1 << h;
        expand.push_back(a.insert(a.end(), h));
        st += 1 << h;
    }

    assert(rem >= 0);
    for (; rem; rem -= rem & -rem) {
        expand.push_back(a.insert(a.end(), __builtin_ctz(rem)));
    }

    int left = n + k - a.size();
    assert(left >= 0);

    for (auto it : expand) {
        list<int> b = {*it};
        auto it2 = b.begin();
        while (left > 0 && it2 != b.end()) {
            while (*it2 == 0 && it2 != b.end())
                ++it2;
            if (it2 == b.end()) break;

            --(*it2);
            it2 = b.insert(it2, *it2);
            --left;
        }
        b.splice(b.end(), a, next(it), a.end());
        a.pop_back();
        a.splice(a.end(), b);
        if (left == 0) break;
    }

    copy(a.begin(), a.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...