#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |