天梯賽練習集 L2-041 插松枝 模擬

把酒问青菜發表於2024-11-24
#include<bits/stdc++.h>
using namespace std;
queue<int>t,z;int x;
void print()
{
	while(!z.empty())
	{
		x=z.front();cout<<x;
		if(z.size()!=1)
			cout<<' ';
		z.pop();
	}
	cout<<endl;
}
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	stack<int>h;
	for(int i=0;i<n;i++)
	{
		cin>>x;
		t.push(x);
	}
	while(!t.empty()||!h.empty()||!z.empty())
	{
		
		if(z.empty())
		{
			if(!h.empty())
			{
				x=h.top();
				h.pop();
				z.push(x);
			}
			else if(!t.empty())
			{
				x=t.front();
				t.pop();
				z.push(x);
			}
		}
		else
		{
			int y=z.back();
			if(!h.empty()&&h.top()<=y)
			{
				x=h.top();
				h.pop();
				z.push(x);
			}
			else if(!t.empty())
			{
				x=t.front();
				if(x<=y)
				{
					t.pop();
					z.push(x);
				}
				else 
				{
					if(h.size()==m)
						print();
					else 
					{
						t.pop();
						h.push(x);
					}
				}
			}
			else
				print();
		}
		if(z.size()==k)
			print();
	}
 } 

相關文章