Submission #1268379

#TimeUsernameProblemLanguageResultExecution timeMemory
1268379aegZalmoxis (BOI18_zalmoxis)C++20
100 / 100
115 ms17324 KiB
#include <bits/stdc++.h> using namespace std; int main() { cin.tie(0)->sync_with_stdio(0); int n, k; cin >> n >> k; vector<int> a(n); for (auto &x : a) cin >> x; deque<int> ansi; deque<bool> b; stack<int> s; for (int i = 0; i < n; i++) { while (!s.empty() && s.top() < a[i]) { ansi.push_back(s.top()); b.push_back(true); int cur = s.top(); s.pop(); while (!s.empty() && s.top() == cur + 1) { s.pop(); cur++; } s.push(cur + 1); } if (!s.empty() && s.top() == a[i]) { s.pop(); int cur = a[i]; while (!s.empty() && s.top() == cur + 1) { s.pop(); cur++; } s.push(cur + 1); } else { s.push(a[i]); } ansi.push_back(a[i]); b.push_back(false); } while (s.top() != 30) { ansi.push_back(s.top()); b.push_back(true); int cur = s.top(); s.pop(); while (!s.empty() && s.top() == cur + 1) { s.pop(); cur++; } s.push(cur + 1); } int remain = n + k - ansi.size(); vector<int> anss; while (true) { if (b.empty()) break; if (!b.front() || remain == 0) { b.pop_front(); anss.push_back(ansi.front()); ansi.pop_front(); } else { remain--; int cur = ansi.front(); ansi.pop_front(); b.pop_front(); if (cur == 1) { b.push_front(false); b.push_front(false); } else { b.push_front(true); b.push_front(true); } ansi.push_front(cur - 1); ansi.push_front(cur - 1); } } copy(anss.begin(), anss.end(), ostream_iterator<int>(cout, " ")); cout << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...