水题。虽然求第K大值的方法有很多种,各种树都可以,但这题只要一个元素个数固定的堆就可以了。。。。
#include <stdio.h> #include <string.h> #include <queue> #define MAXN 1000000 int n,k,num; char op[5]; int main(){ //freopen("test.in","r",stdin); while(scanf("%d%d",&n,&k)!=EOF){ std::priority_queue<int,std::vector<int>,std::greater<int> > q; for(int i=0,ins=0;i<n;i++){ scanf("%s",op); if(op[0]=='Q'){ printf("%d\n",q.top()); }else{ scanf("%d",&num); q.push(num); ins++; if(ins>k)q.pop(); } } } return 0; }