又来补题了哎哎哎,考试的时候卡了一小时就离谱
#include<iostream>
#include<stack>
using namespace std;
const int N = 1010;
int n,m,k;
int p[N];
stack<int>s;
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++)cin>>p[i];
int i=0;
while(1){
stack<int>l;
if(i==n&&s.size()==0)break;//如果小盒子和推送器空了就break
if(s.size()){
l.push(s.top());
s.pop();
} else l.push(p[i++]);
while(1){
if(l.size()==k)break;//松枝满了就break
if(s.size()){//先看小盒子
if(s.top()<=l.top()){
l.push(s.top());
s.pop();
}
else if(i<n){
if(p[i]<=l.top())l.push(p[i++]);
else if(s.size()<m)s.push(p[i++]);
else break;
}
else break;
}
else {//再看推送器
if(i<n){
if(p[i]<=l.top()){
l.push(p[i++]);
}
else if(s.size()<m)
s.push(p[i++]);
else break;
}
else break;
}
}
bool flag=0;
stack<int>s; //需要逆序输出松枝
while(l.size()){
s.push(l.top());
l.pop();
}
while(s.size())
{
if(flag)cout<<" ";
flag=1;
cout<<s.top();
s.pop();
}
puts("");
}
}