【题意】:给出一个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 }