3. 排队
题目ID:7782必做题100分
最新提交:
Wrong Answer
34 分
历史最高:
Wrong Answer
34 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
时间:1s 空间:256M
题目描述:
幼儿园里的小朋友在玩排队游戏,他们会根据老师的要求排队。
老师共进行 nn 次操作,操作分为以下三种:
1 x
: 将一名身高为 xx 的小朋友加入队尾2
: 输出队列最前面的小朋友的身高,并让他出队列,保证进行该操作时队列非空3
: 将队列里的小朋友按照身高升序排序
输入格式:
第一行,包含一个正整数 nn,表示操作次数。
加下来nn行按照以下格式之一输入操作:
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≤n≤2×105;0≤x≤1091≤n≤2×105;0≤x≤109。
样例1解释:
第1个操作后,队列为 [1][1];
第2个操作后,队列为 [1,3][1,3];
第3个操作后,队列为 [1,3,2][1,3,2];
第4个操作后,队列为 [1,2,3][1,2,3];
第5个操作后,队列为 [2,3][2,3];
第6个操作后,队列为 [3][3];
第7个操作后,队列为 [3,0][3,0];
第8个操作后,队列为 [0,3][0,3];
第9个操作后,队列为 [3][3]。
#include<bits/stdc++.h>
using namespace std;
int n;
queue<int> q;
priority_queue<int,vector<int>,greater<int>> pq;
int main(){
cin>>n;
while(n--){
// cout<<"N="<<n<<endl;
int s;
cin>>s;
if(s==1){
int x;
cin>>x;
q.push(x);
}else if(s==2){
if(!pq.empty()){
cout<<pq.top();
pq.pop();
}else{
cout<<q.front()<<endl;
q.pop();
}
}else{
while(q.size()){
pq.push(q.front());
q.pop();
}
}
}
return 0;
}