Submission #139030

#TimeUsernameProblemLanguageResultExecution timeMemory
139030mlyean00Zalmoxis (BOI18_zalmoxis)C++14
90 / 100
234 ms63864 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; } stack<int> st; st.push(30); for (auto it = a.begin(); it != a.end(); ++it) { if (*it < st.top()) { st.push(*it); } else if (*it == st.top()) { int h = st.top(); while (h == st.top()) { ++h; st.pop(); } st.push(h); } else { int h = st.top(); rem -= 1 << h; it = a.insert(it, h); while (!st.empty() && h == st.top()) { ++h; st.pop(); } st.push(h); } } list<int> b; while (!st.empty()) { int h = st.top(); if (h == 30) break; rem -= 1 << h; b.push_back(h); while (!st.empty() && st.top() == h) { st.pop(); ++h; } if (h < 30) st.push(h); } vector<int> v; for (; rem; rem -= rem & -rem) { b.push_back(__builtin_ctz(rem)); } int left = n + k - a.size() - b.size(); assert(left >= 0); auto it = b.begin(); for (int i = 0; i < left; ++i) { while (*it == 0) ++it; --(*it); it = b.insert(it, *it); } a.splice(a.end(), b); 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...