【题意】:给出一个n和k,表示有n个操作。操作只有两种:1.插入一个数x 2.查询当前第k小的数。
【题解】:题意很好理解,这里可以直接用stl 的 priority queue,代码超级短。维护一个优先队列,使队列中元素个数总不超过k,查询时直接输出堆顶元素即可。
【代码】:
1 #include "iostream"
2 #include "cstdio"
3 #include "cstring"
4 #include "queue"
5 #include "functional"
6 #include "string"
7 using namespace std;
8 int n, k;
9 void solve() {
10 int val;
11 string s;
12 priority_queue<int, vector<int>, greater<int> > que;
13 for(int i = 0; i < n; i++) {
14 cin >> s;
15 if(s[0] == 'I') {
16 scanf("%d", &val);
17 que.push(val);
18 if(que.size() > k) que.pop();
19 } else cout << que.top() << endl;
20 }
21 }
22
23 int main() {
24 while(~scanf("%d%d", &n, &k)) solve();
25 return 0;
26 }