3. 排队 34分求调

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;
}

加个换行

Thanks :slight_smile: