PTA | 程序设计类实验辅助教学平台 (pintia.cn)
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
queue<int> q;
stack<int> s;
void output(vector<int> arr) {
if (arr.empty()) return;
int f = 0;
for (int x : arr) {
if (f) cout << " ";
cout << x;
f = 1;
}
cout << endl;
}
int main() {
int n, m, k;
cin >> n >> m >> k;
for (int i = 0, a; i < n; i++) {
cin >> a;
q.push(a);
}
while (!q.empty() || !s.empty()) {
vector<int> arr;
while (arr.size() < k) {
if (q.empty() && s.empty()) break;
if (arr.empty()) {
if (!s.empty()) {
arr.push_back(s.top());
s.pop();
}
else {
arr.push_back(q.front());
q.pop();
}
}
else {
if (!s.empty() && s.top() <= arr[arr.size() - 1]) {
arr.push_back(s.top());
s.pop();
}
else if (!q.empty() && q.front() <= arr[arr.size() - 1]) {
arr.push_back(q.front());
q.pop();
}
else if (s.size() < m && !q.empty()) {
s.push(q.front());
q.pop();
}
else break;
}
}
output(arr);
}
return 0;
}