题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4006
题目意思:动态维护所有数中第m小的数。
题目分析:如果用普通的方法,那必然会超时,此题可以用线段树维护,但更为的简单的是可以用优先队列维护。
因为我们只需要第m小的值,第m+1以及更小的值我们可以不用管它,直接出队即可。
下面是AC代码:
#include<queue>
#include<iostream>
using namespace std;
struct node
{
int s;
friend bool operator<(node a,node b)
{
return a.s>b.s;
}
};
int main()
{
int n,m;
while(cin>>n>>m)
{
priority_queue<node>q;
while(n--)
{
char c;
int x;
node t;
cin>>c;
if(c=='I')
{
cin>>x;
t.s=x;
q.push(t);
if(q.size()>m) q.pop();
}
else cout<<q.top().s<<endl;
}
}
return 0;
}