题目描述
众所周知,懒羊羊是所有小羊里最贪吃的一只。然而,鲜为人知的是,懒羊羊也有存储粮食的习惯。而更让大家吃惊的事实是,我们的懒羊羊做事很有条理,每当他存储一份粮食时,他会专门拿出一个筐来存放。因此,他的仓库里有很多很多筐的青草。而我们的懒羊羊又是一个经常馋嘴的小羊,每当他想吃草时,就会从仓库里找出数量最少的一筐草,把它吃掉。可是懒羊羊因为草吃得太多了导致大脑运转缓慢,所以他不得不向你请求支援,帮他找出他应该吃数量为多少的青草。
输入
第一行为一个正整数n,表示懒羊羊一共进行了n次操作(2<=n<=1000000)
第二行至第n+1行每行表示一个懒羊羊的操作,当这行形式为单独一个字符‘q’时,表示懒羊羊肚子饿了,要吃掉仓库里当前数量最少的那份青草;当这行形式为一个字符‘ i’和一个整数k时,表示懒羊羊将一份数量为k(1<=k<=2147483647)的青草存入了仓库,‘ i’和k之间用空格隔开。
输入数据保证每次询问时仓库里都有草可吃且所有操作中懒羊羊至少会吃一次草。
输出
每当输入为‘q’时,输出懒羊羊当前吃掉的那份青草的数量是多少。
样例输入
5
i 5
i 2
q
i 9
q
样例输出
2
5
这道题我用了队列做,每次输入是i,就将值放进队列中;如果输入是q就将队头移出
#include<bits/stdc++.h>
using namespace std;
priority_queue < int , vector < int > , greater < int > > q; //开一个降序的队列,这个我也不会看网上的
int ans,a[1000005],n,x,i,j,k;
int main()
{ char ch;
cin>>n;
for(int i=0;i<n;i++){
cin>>ch;
if(ch=='i') { cin>>x; //如果是i,就放到队列中
q.push(x);
}
if(ch=='q') {
a[j++]=q.top(); //如果是q,就将队头的值赋给a数组,并加队头移出队列
q.pop();
}
}
for(int i=0;i<j;i++)
cout<<a[i]<<endl; //依次输出a数组即可
return 0;
}