#include<bits/stdc++.h> using namespace std; long long n,a,b,q,L; vector<long long>sz; stack<long long>stos; int main() { cin>>n; for(long long i=0;i<n;i++) { cin>>a; sz.push_back(a); } sort(sz.begin(),sz.end()); cin>>q; for(long long i=0;i<q;i++) { cin>>L; if(L==1) { cin>>a>>b; long long ct=0; bool nah=0; while(stos.empty()==0) { stos.pop(); } if(a>=b) { cout << "0" << endl; continue; } sz.push_back(9223372036854775807); for(long long i=0;i<sz.size();i++) { if(a>=b) { cout << ct << endl; break; } if(sz[i+1]<a) { stos.push(sz[i]); continue; } else { a+=sz[i]; ct++; if(a>sz[i+1]) { continue; } else { while(true) { if(a>=b) { break; } if(stos.empty()==1) { if(a<b) { nah=1; break; } } a+=stos.top(); stos.pop(); ct++; } if(nah==1) { cout << "-1" << endl; break; } } } if(a>=b) { cout << ct << endl; break; } } sz.pop_back(); } if(L==2) { cin>>a; if(sz[sz.size()-1]<a) { sz.push_back(a); } else { vector<long long>::iterator IT=lower_bound(sz.begin(),sz.end(),a); sz.insert(IT,a); } continue; } if(L==3) { cin>>a; vector<long long>::iterator IT=lower_bound(sz.begin(),sz.end(),a); sz.erase(IT); continue; } } }
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include<bits/stdc++.h> using namespace std; long long n,a,b,q,L; vector<long long>sz; stack<long long>stos; int main() { cin>>n; for(long long i=0;i<n;i++) { cin>>a; sz.push_back(a); } sort(sz.begin(),sz.end()); cin>>q; for(long long i=0;i<q;i++) { cin>>L; if(L==1) { cin>>a>>b; long long ct=0; bool nah=0; while(stos.empty()==0) { stos.pop(); } if(a>=b) { cout << "0" << endl; continue; } sz.push_back(9223372036854775807); for(long long i=0;i<sz.size();i++) { if(a>=b) { cout << ct << endl; break; } if(sz[i+1]<a) { stos.push(sz[i]); continue; } else { a+=sz[i]; ct++; if(a>sz[i+1]) { continue; } else { while(true) { if(a>=b) { break; } if(stos.empty()==1) { if(a<b) { nah=1; break; } } a+=stos.top(); stos.pop(); ct++; } if(nah==1) { cout << "-1" << endl; break; } } } if(a>=b) { cout << ct << endl; break; } } sz.pop_back(); } if(L==2) { cin>>a; if(sz[sz.size()-1]<a) { sz.push_back(a); } else { vector<long long>::iterator IT=lower_bound(sz.begin(),sz.end(),a); sz.insert(IT,a); } continue; } if(L==3) { cin>>a; vector<long long>::iterator IT=lower_bound(sz.begin(),sz.end(),a); sz.erase(IT); continue; } } } |