【HDU4006】The kth great number

第一次接触优先队列,算是入门题吧,发个题解纪念一下~

题意是一个元素数动态增加的数列,遇到查询时就输出数列中第k大的数。由于是动态增查,所以类似快排划分树都不敢用了,然后听说优先队列适合解,因为询问的k是不变的,所以队列中只需保留k个元素,查询时直接输出队头元素即可~

STL很好很强大啊,要学的还有很多,干巴爹……

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stack>
#include <queue>
#include <set>
#include <iostream>
#include <algorithm>
using namespace std;

struct s{
    int val;
    friend bool operator < (const s a,const s b){ //从大到小排序
        if(a.val > b.val) return 1;
        return 0;
    }
};

int main()
{
    int n, k, x;
    char c;
    while(scanf("%d %d",&n,&k)!=EOF){

        priority_queue<s> q; //优先队列
        s tmp;
        while(n--){
            scanf(" %c",&c);
            if(c=='I'){
                scanf("%d",&x);
                tmp.val = x;
                q.push(tmp);
                if(q.size()>k) q.pop();
            }
            else printf("%d\n",q.top());
        }
    }
    return 0;
}
点赞