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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/** Kajetan Lewandowski **/

#include <bits/stdc++.h>
using namespace std;

list<long long>t;
vector<long long>inp;
int main() {
    bool dead=0;
    int n,q,p,w;
    long long winp,s,k;
    scanf("%d", &n);
    for(int i=0; i<n; ++i){
        scanf("%lld", &winp);
        inp.push_back(winp);
    }
    sort(inp.begin(),inp.end());
    for(int i=0; i<inp.size(); ++i){
        t.push_back(inp[i]);
    }
    scanf("%d", &q);
    while(q--){
        s=0;k=0;
        scanf("%d", &p);
        if(p==1){
            stack<long long>d;
            w=0;
            dead=0;
            scanf("%lld%lld",&s,&k);
            for(auto it = t.begin(); it!=t.end(); ++it){
                if(s>=k){
                    printf("%d\n",w);
                    dead=1;
                    break;
                }
                while(s<k && s<=*it && !d.empty()){
                    //cout<<*it;
                    s+=d.top();
                    ++w;
                    d.pop();
                }
                if(s<=*it && s<k){
                    printf("-1\n");
                    dead=1;
                    break;
                }
                d.push(*it);
            }
            if(!dead){
                while(s<k && !d.empty()){
                    s+=d.top();
                    ++w;
                    d.pop();
                }
                if(s>=k){
                    printf("%d\n",w);
                } else {
                    printf("-1\n");
                }
            }
        }else if(p==2){
            scanf("%lld",&s);
            list<long long>::iterator ix=t.end();
            for(auto it = t.begin(); it!=t.end(); ++it){
                if(*it>=s){
                    ix=it;
                    break;
                }
            }
            t.insert(ix,s);
        }else if(p==3){
            scanf("%lld",&s);
            list<long long>::iterator ix=t.end();
            for(auto it = t.begin(); it!=t.end(); ++it){
                if(*it==s){
                    ix=it;
                    break;
                }
            }
            t.erase(ix);
        }
    }

}