#include<stdio.h> #include<queue> #include<vector> #include<iostream> using namespace std; int main() { int n,m,k; char a; while(scanf("%d %d",&n,&k)!=EOF) { priority_queue<int ,vector<int>,greater<int> >q; while(n--) { getchar();//接收空格键??容易忽略 scanf("%c",&a); if(a=='I') { scanf("%d",&m); if(q.size()<k)q.push(m); else { if(m>q.top()) { q.pop(); q.push(m); } } } else printf("%d\n",q.top()); } } return 0; }
优先队列,优先队列默认是按从大到小排列的priority_queue<int> q;,如果想要按从小到大排列就:priority_queue<int,vector<int>,greater<int> > q;
这题主要就是维护一个长度为K的优先队列就行了:
I操作:每次遇到比队列里的最小值大的话就,把队顶元素删除,把这个值添加到队列中。
Q操作:直接输出队顶元素。