#include <iostream> #include <stdio.h> #include <vector> #include <algorithm> using namespace std; vector <long long> fishes; long long x,y,z,mass; int n,m,op,mid; long long result; long long pp,mm,kk; bool possible; int binsearch(long long val){ int p=0; int k=fishes.size()-2; int mid=(p+k)/2; while(val<fishes[mid]||val>fishes[mid+1]){ if(val<fishes[mid]){ k=mid; mid=(p+k)/2; } else{ p=mid; mid=(p+k+1)/2; } } return mid; } int main() { scanf("%d",&n); fishes.push_back(-1); for(int i=0;i<n;i++){ scanf("%ld",&z); fishes.push_back(z); } fishes.push_back(1000000000001); sort(fishes.begin(),fishes.end()); scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d",&op); if(op==1){ scanf("%lld%lld",&x,&y); result=0; possible=0; while(x<y){ vector <long long> new_v(fishes); pp=0; kk=fishes.size()-2; mm=(pp+kk)/2; while(new_v[mm]>=x||new_v[mm+1]<x){ if(new_v[mm]>=x){ kk=mm; mm=(pp+kk)/2; } else{ pp=mm; mm=(pp+kk+1)/2; } } if(mm==0) {printf("-1\n");possible=1;break;} else{ result++; x+=fishes[mm]; new_v.erase(new_v.begin()+mm+1); } } if(!possible) printf("%lld\n",result); } else if(op==2){ scanf("%lld",&mass); fishes.insert(fishes.begin()+binsearch(mass)+1,mass); } else if(op==3){ scanf("%lld",&mass); fishes.erase(fishes.begin()+binsearch(mass)+1); } } 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 88 | #include <iostream> #include <stdio.h> #include <vector> #include <algorithm> using namespace std; vector <long long> fishes; long long x,y,z,mass; int n,m,op,mid; long long result; long long pp,mm,kk; bool possible; int binsearch(long long val){ int p=0; int k=fishes.size()-2; int mid=(p+k)/2; while(val<fishes[mid]||val>fishes[mid+1]){ if(val<fishes[mid]){ k=mid; mid=(p+k)/2; } else{ p=mid; mid=(p+k+1)/2; } } return mid; } int main() { scanf("%d",&n); fishes.push_back(-1); for(int i=0;i<n;i++){ scanf("%ld",&z); fishes.push_back(z); } fishes.push_back(1000000000001); sort(fishes.begin(),fishes.end()); scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d",&op); if(op==1){ scanf("%lld%lld",&x,&y); result=0; possible=0; while(x<y){ vector <long long> new_v(fishes); pp=0; kk=fishes.size()-2; mm=(pp+kk)/2; while(new_v[mm]>=x||new_v[mm+1]<x){ if(new_v[mm]>=x){ kk=mm; mm=(pp+kk)/2; } else{ pp=mm; mm=(pp+kk+1)/2; } } if(mm==0) {printf("-1\n");possible=1;break;} else{ result++; x+=fishes[mm]; new_v.erase(new_v.begin()+mm+1); } } if(!possible) printf("%lld\n",result); } else if(op==2){ scanf("%lld",&mass); fishes.insert(fishes.begin()+binsearch(mass)+1,mass); } else if(op==3){ scanf("%lld",&mass); fishes.erase(fishes.begin()+binsearch(mass)+1); } } return 0; } |