HDU-#4006 The kth great number(优先队列)

来源:互联网 发布:自动建站系统源码 编辑:程序博客网 时间:2024/05/22 09:46

题目大意:两个小朋友做游戏,一个人提供两种操作,一是“I”,即存入数据data,二是“Q”,即问存入数据列中第k大的数是多少?

解题思路:利用优先队列的性质来维护这个数据序列的有序性,然后设定优先队列的宽度为k,那么当数据超出k值就弹出,这样就可以维护队列的top为第k大的值。

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4006


STLcode:

#include <iostream>#include <cstdio>#include <vector>#include <queue>using namespace std;int data,n,k;char opr;int main(){    priority_queue<int,vector<int>,greater<int> > q;    while(scanf("%d%d",&n,&k)!=EOF){        for(int i=0;i<n;i++){            cin>>opr;            if(opr=='I'){                cin>>data;                if(q.size()<k) q.push(data);                else if(data > q.top()) {q.pop(); q.push(data);}            }            else if(opr=='Q'){                cout<<q.top()<<endl;            }        }        while(!q.empty()){            q.pop();        }    }    return 0;}


0 0
原创粉丝点击