제출 #647984

#제출 시각아이디문제언어결과실행 시간메모리
647984toma_ariciuZalmoxis (BOI18_zalmoxis)C++17
40 / 100
245 ms22244 KiB
/// Preset de orice altceva
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <iomanip>

using namespace std;

int n, k, v[1000005], ind, diff;
vector <pair<int, bool>> sol;
vector <int> ans;

void dfs(int val)
{
    if(val == -1)
        return;
    if(v[ind] == val)
    {
        ind++;
        sol.push_back({val, 1});
        return;
    }
    if(v[ind] < val)
    {
        dfs(val - 1);
        dfs(val - 1);
    }
    else
        sol.push_back({val, 0});
}

int main()
{
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
        cin >> v[i];
    v[n + 1] = 31;
    ind = 1;
    dfs(30);
    diff = n + k - sol.size();
    for(auto elem : sol)
    {
        if(elem.second == 1)
            ans.push_back(elem.first);
        else if(diff != 0)
        {
            diff++;
            if((1 << elem.first) >= diff)
            {
                for(int i = 0; i <= elem.first; i++)
                {
                    if(!((1 << i) & diff))
                        continue;
                    for(int j = 0; j < (1 << i); j++)
                        ans.push_back(elem.first - i - 1);
                }
                diff = 0;
            }
            else
            {
                diff -= (1 << elem.first);
                for(int i = 0; i < (1 << elem.first); i++)
                    ans.push_back(0);
            }
        }
        else
            ans.push_back(elem.first);
    }
    for(int elem : ans)
        cout << elem << ' ';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...