#include<bits/stdc++.h> using namespace std; vector <long long>szprota; long long n,q,w,pyt; long long odp; long long najw; long long najm; long long waga,doosiag; bool czyzj[400000]; long long h; int main() { scanf("%lld",&n); for(long long i=0;i<n;i++) { scanf("%lld",&w); szprota.push_back(w); } sort(szprota.begin(),szprota.end()); scanf("%lld",&q); for(long long i=0;i<q;i++) { scanf("%lld",&pyt); if(pyt==2) { scanf("%lld",&w); szprota.push_back(w); sort(szprota.begin(),szprota.end()); n++; } else if(pyt==3) { scanf("%lld",&w); szprota.erase(find(szprota.begin(),szprota.end(),w)); n--; } else { najw=0; najm=400000; odp=0; h=0; scanf("%lld %lld",&waga,&doosiag); while(waga<doosiag) { while(waga>szprota[h+1]&&h<n-1) { h++; } while(czyzj[h]==1&&h>=0) { h--; } if(h<0) { printf("-1\n"); goto zupa; } waga+=szprota[h]; odp++; czyzj[h]=1; if(h>najw) najw=h; if(h<najm) najm=h; } printf("%lld\n",odp); zupa: for(long long k=najm;k<=najw;k++) {czyzj[k]=0; } } } return 0; }
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 | #include<bits/stdc++.h> using namespace std; vector <long long>szprota; long long n,q,w,pyt; long long odp; long long najw; long long najm; long long waga,doosiag; bool czyzj[400000]; long long h; int main() { scanf("%lld",&n); for(long long i=0;i<n;i++) { scanf("%lld",&w); szprota.push_back(w); } sort(szprota.begin(),szprota.end()); scanf("%lld",&q); for(long long i=0;i<q;i++) { scanf("%lld",&pyt); if(pyt==2) { scanf("%lld",&w); szprota.push_back(w); sort(szprota.begin(),szprota.end()); n++; } else if(pyt==3) { scanf("%lld",&w); szprota.erase(find(szprota.begin(),szprota.end(),w)); n--; } else { najw=0; najm=400000; odp=0; h=0; scanf("%lld %lld",&waga,&doosiag); while(waga<doosiag) { while(waga>szprota[h+1]&&h<n-1) { h++; } while(czyzj[h]==1&&h>=0) { h--; } if(h<0) { printf("-1\n"); goto zupa; } waga+=szprota[h]; odp++; czyzj[h]=1; if(h>najw) najw=h; if(h<najm) najm=h; } printf("%lld\n",odp); zupa: for(long long k=najm;k<=najw;k++) {czyzj[k]=0; } } } return 0; } |