链接:点击打开链接
题意:给出一个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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 19:38:11