Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
Sample Output
HintXiao Ming won't ask Xiao Bao the kth great number when the number of the written number is smaller than k. (1=<k<=n<=1000000).
题目大意:
有n步操作,I代表往这一串数里面再加一个,Q则代表查询第k大的数是哪一个。
思路分析:首先要明白第k大的数实际上就是有k-1个数比他大,另外数据范围很大,直接暴力肯定TLE,
因此可以想到使用优先队列这种数据结构,构造最小堆,堆顶的元素刚好是第k大的数,因此当q.size()>k时
直接pop(),避免爆内存。
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
int main()
{
int n,k,m;
char s[5];
while(scanf("%d%d",&n,&k)!=EOF)
{
priority_queue<int,vector<int>,less<int> >Q;
while(n--)
{
scanf("%s",s);
if(s[0]=='I')
{
scanf("%d",&m);
Q.push(m);
if(Q.size()>k) Q.pop();
}
else
{
printf("%d\n",Q.top());
}
}
}
return 0;
}