Ciallo~(∠・ω< )⌒☆,大家好,本蒻蒟的第一篇题解,不喜勿喷。首先这题可以先用设置两个优先队列,一个大根堆p,一个设置成小根堆q,先用大根堆p存储输入数据,再用小根堆q维护前K个数据,当小于等于q的堆顶元素时入队,大于时入怕,最后输出去q的堆顶元素即可。

#include<iostream>
#include<queue>
using namespace std;

int n, m, k;
int main()
{

    priority_queue<int, vector<int>, greater<int>>p;
    priority_queue<int>q;
    cin >> n >> m >> k;

    for (int i = 0; i < n; i++)
    {
        int x; scanf("%d", &x);
        p.push(x);
    }


    while (m--)
    {
        int a, b; scanf("%d", &a);
        if (a == 1)
        {
            scanf("%d", &b);
            if (!q.empty()&&q.top() >= b)q.pop(), q.push(b);
            else p.push(b);
        }
        else
        {
            if (p.size()+q.size() < k)cout << -1 << endl;
            else
            {
                while (!p.empty() && q.size() < k)
                {
                    q.push(p.top()); p.pop();
                }
                printf("%d\n", q.top());
            }

        }
    }
}