1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <bits/stdc++.h>
using namespace std;

int n, q;
struct Pond{
    multiset<int64_t, greater<int64_t>> fish;
    int64_t sum = 0;
} pond;

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> n;
    for(int i = 0; i < n; i++){
        int64_t w;
        cin >> w;
        pond.fish.insert(w);
        pond.sum += w;
    }
    cin >> q;
    while(q --> 0){
        int op;
        cin >> op;
        if(op == 2){
            int64_t w;
            cin >> w;
            pond.fish.insert(w);
            pond.sum += w;
        }
        else if(op == 3){
            int64_t w;
            cin >> w;
            pond.fish.erase(w);
            pond.sum -= w;
        }
        else{
            int64_t s, k;
            cin >> s >> k;
            if(pond.sum + s < k){
                cout << "-1\n";
                continue;
            }
            int64_t moves = 0;
            vector<int64_t> del;
            while(s < k and pond.fish.size() > 0){
                auto w = pond.fish.upper_bound(s);
                if(w == pond.fish.end()){
                    break;
                }
                del.push_back((*w));
                s += (*w);
                pond.fish.erase(w);
                moves++;
            }
            if(s < k){
                cout << "-1\n";
            }
            else{
                cout << moves << "\n";
            }
            for(auto w : del){
                pond.fish.insert(w);
            }
        }
    }


    return 0;
}