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());
}
}
}
}