Submission #1269796

#TimeUsernameProblemLanguageResultExecution timeMemory
1269796AlebnZalmoxis (BOI18_zalmoxis)C++20
5 / 100
667 ms327680 KiB
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
using namespace std;

signed main() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for(auto& i : a) cin >> i;
    vector<int> res;
    function<int(int,int,int)> dfs = [&](int i, int l, int r)->int{
        assert(i >= 0);
        if(!i || l > r) return 0;
        int prev = l, sum = 0;
        for(int j = l; j <= r; j++) {
            if(a[j] == i) {
                sum += dfs(i - 1, prev, j - 1) + 1;
                prev = j + 1;
                res.push_back(i);
            }
        }
        sum += dfs(i - 1, prev, r);
        if(i != 30 && sum % 2) {
            res.push_back(i);
            sum++;
            k--;
        }
        return sum / 2;
    };
    dfs(30, 0, n - 1);
    vector<int> out;
    out.reserve(n + k);
    function<void(int)> divide = [&](int i) {
        assert(i >= 1);
        if(!k || i == 1) out.push_back(i);
        else {
            k--;
            divide(i - 1);
            divide(i - 1);
        }
    };
    for(int i = 0; i < res.size(); i++) {
        assert(res[i] >= 1);
        divide(res[i]);
    }
    for(auto i : out) cout << i << " ";
    cout << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...