Submission #647983

#TimeUsernameProblemLanguageResultExecution timeMemory
647983toma_ariciuZalmoxis (BOI18_zalmoxis)C++17
5 / 100
275 ms23648 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();
    if(diff != 0)
    {
        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...