时间:1s 空间:256M
题目描述:
幼儿园里的小朋友在玩排队游戏,他们会根据老师的要求排队。
老师共进行次操作,操作分为以下三种:
- 1 x : 将一名身高为
的小朋友加入队尾
-
2 : 输出队列最前面的小朋友的身高,并让他出队列,保证进行该操作时队列非空
-
3 : 将队列里的小朋友按照身高升序排序
输入格式:
第一行,包含一个正整数 ,表示操作次数。
加下来行按照以下格式之一输入操作:
1 x
2
3
输出格式:
对应操作进行输出。
样例1输入:
9
1 1
1 3
1 2
3
2
2
1 0
3
2
样例1输出:
1
2
0
约定与解释:
对于100%的数据,;
样例1解释:
第1个操作后,队列为;
第2个操作后,队列为 ;
第3个操作后,队列为 ;
第4个操作后,队列为 ;
第5个操作后,队列为;
第6个操作后,队列为 ;
第7个操作后,队列为 ;
第8个操作后,队列为 ;
第9个操作后,队列为 。
主要思路:
我们可以用priority_queue<int>(priority_queue 会自动从大到小排序)来辅助执行操作3,用queue来用来执行操作1和2。
上代码(代码中有注释)
#include<bits/stdc++.h>
using namespace std;
queue<int> q;//用于正常操作,不会自动排序
priority_queue<int> q1;//辅助操作3
int main()
{
int n;
cin>>n;//读入n
for(int i=1;i<=n;i++)
{
int op;
cin>>op;//读入操作符
if(op == 1)
{
int x;
cin>>x;
q.push(x);//插入队列
}
else if(op == 2)
{
if(!q1.empty())//如果优先队列非空(因为优先队列是先插入进去的)
{
cout<<q1.top()<<'\n';//输出
q1.pop();
}
else
{
cout<<q.front()<<'\n';//否则就输出q的队头
q.pop();
}
}
else//为操作3
{
while(!q.empty())//把q全部都放进q1中
{
q1.push(q.front());//q1插入(优先队列自动排序)
q.pop();//q弹出
}
}
}
return 0;
}