使用优先队列维护数组中前
小的数。
对于初始化与操作
,对于每个元素首先
进堆,此时如果
则不用处理,否则当前
,进行一次
操作一定会弹出当前第
小的元素,可保证堆顶元素仍为第
小。
对于操作
,如果
代表数组内还没有
个数,输出
,否则输出堆顶元素即可。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
void solve(){
int n, m, k;
cin >> n >> m >> k;
priority_queue<int> q;
for (int i = 1; i <= n; i++) {
int num;
cin >> num;
q.push(num);
}
while (q.size() > k) q.pop();
while (m--) {
int op;
cin >> op;
if (op == 1) {
int num;
cin >> num;
q.push(num);
while (q.size() > k) q.pop();
}
if (op == 2) {
if (q.size() < k) cout << -1 << endl;
else cout << q.top() << endl;
}
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _T = 1;
// cin >> _T;
while (_T--){
solve();
}
return 0;
}