题目描述
给定一个数列,初始为空,请支持下面三种操作:
- 给定一个整数 𝑥,请将 𝑥 加入到数列中。
- 输出数列中最小的数。
- 删除数列中最小的数(如果有多个数最小,只删除 1个)。
输入格式
第一行是一个整数,表示操作的次数 𝑛。
接下来 𝑛 行,每行表示一次操作。每行首先有一个整数 𝑜𝑝 表示操作类型。
- 若 𝑜𝑝=1,则后面有一个整数 𝑥,表示要将 𝑥 加入数列。
- 若 𝑜𝑝=2,则表示要求输出数列中的最小数。
- 若 𝑜𝑝=3,则表示删除数列中的最小数。如果有多个数最小,只删除 1 个。
输出格式
对于每个操作 2,输出一行一个整数表示答案。
输入输出样例
输入 #1复制
5 1 2 1 5 2 3 2
输出 #1复制
2 5
说明/提示
【数据规模与约定】
- 对于 30%的数据,保证 𝑛≤15。
- 对于 70% 的数据,保证 𝑛≤104。
- 对于 100%的数据,保证 1≤𝑛≤106,1≤𝑥<231,𝑜𝑝∈{1,2,3}。
备注
104 表示 10 的 4 次方
106 表示 10 的 6 次方
231 表示 2 的 31 次方
AC代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a;
scanf("%d",&n);
priority_queue<int,vector<int>,greater<int> > s;
for(int i=0;i<n;i++){
scanf("%d",&a);
if(a==1){
int x;
scanf("%d",&x);
s.push(x);
}
if(a==2){
printf("%d\n",s.top());
}
if(a==3){
s.pop();
}
}
return 0;
}