hdu4006

链接:点击打开链接

题意:给出一个n和一个k,n为有多少条命令,命令分为两种,输入‘I’时代表增加一个数,输入‘Q’代表询问并输出第k大的数

代码:

#include <iostream>
#include <stdio.h>
#include <queue>
using namespace std;
int main(){
    int i,n,k,num;
    char c;
    priority_queue<int,vector<int>,greater<int> >q;
    while(scanf("%d%d",&n,&k)!=EOF){
        while(q.size())q.pop();             //初始化队列
        for(i=1;i<=n;i++){
        cin>>c;
        if(c=='I'){
            scanf("%d",&num);
            if(q.size()<k)                  //永远使队首为所求的值
            q.push(num);
            else if(q.top()<num)            //当队首小于输入值时,所求的
            q.pop(),q.push(num);            //值的大小一定发生变化,因此
        }                                   //q.pop()
        else
        printf("%d\n",q.top());             //运用优先队列使得队首永远是所求值
        }
    }
    return 0;
}


 

 

你可能感兴趣的:(hdu4006)