#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
struct node{
int pos;
bool operator<(node st) const{
return st.pos<pos;
}
};
priority_queue<node> p;
int main(){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
char x;
int r,ans=0;
while(!p.empty()) p.pop();
while(n--){
cin>>x;
if(x=='I'){
cin>>r;
node temp;
temp.pos=r;
if(ans<k){
p.push(temp);
}
else {
if(p.top().pos<r){
p.pop();
p.push(temp);
}
}
ans++;
}
else printf("%d\n",p.top().pos);
}
}
return 0;
}
题意很简单,就是求第k大的数,这样的话只需要保存前k大的数即可,对于后来加进去的数,如果大于当前k个数的最小值
则需要更新这k个数,明显如果加进去的数大于当前k个数的最小值,则加进去的数就取代当前k个数的最小值成为前k大的数之一。然后就是利用优先队列的性质。。。保证每次更新的都是k个数中的最小值。