/** 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); } } }
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); } } } |