使用优先队列维护数组中前 小的数。 对于初始化与操作 ,对于每个元素首先 进堆,此时如果 则不用处理,否则当前 ,进行一次 操作一定会弹出当前第 小的元素,可保证堆顶元素仍为第 小。 对于操作 ,如果 代表数组内还没有 个数,输出 ,否则输出堆顶元素即可。

#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;
}