#include<bits/stdc++.h> using namespace std; struct trie { int type; long long a,b; }; /*void wypisz(vector<long long> &vec) { for(int k=0;k<vec.size();k++) { cout << vec[k] << " "; } cout <<endl; }*/ void solve_1(vector<long long> &vec,int n,int q,vector<trie> &cos) { sort(vec.begin(),vec.end()); vector<long long>::iterator x; int p_1,p_2; int il=0; for(int k=0;k<q;k++) {if(cos[k].type==1){ x = lower_bound(vec.begin(),vec.end(),cos[k].a); if(cos[k].b <=cos[k].a) { printf("0\n"); continue; } if(x==vec.begin() && *x>=cos[k].a) { printf("-1\n"); continue; } while(*x>=cos[k].a)x--; p_1 = x-vec.begin()-1; p_2= x-vec.begin(); il=0; while(cos[k].a<cos[k].b) { x = lower_bound(vec.begin(),vec.end(),cos[k].a); while(*x>=cos[k].a)x--; if(p_2<=x-vec.begin()) p_2=x-vec.begin(); if(vec[p_2]<cos[k].a) { cos[k].a+=vec[p_2]; p_2++; il++; } else if(p_1>=0) { cos[k].a+=vec[p_1]; p_1--; il++; } else { printf("-1\n"); break; } } if(cos[k].a>=cos[k].b) printf("%d\n",il); } else if(cos[k].type==2) { x = lower_bound(vec.begin(),vec.end(),cos[k].a); vec.insert(x,cos[k].a); } else { x = lower_bound(vec.begin(),vec.end(),cos[k].a); vec.erase(x); } // wypisz(vec); } } int main() { int n; scanf("%d",&n); vector<long long> vec(n+1); for(int k=0;k<n;k++) scanf("%lld",&vec[k]); vec[n] = 1000000000000000000; int q; scanf("%d",&q); vector<trie> zapytania(q); // bool only_1 = true; for(int k=0;k<q;k++) { int type; scanf("%d",&type); if(type==1) { long long a,b; scanf("%lld%lld",&a,&b); zapytania[k].type = type; zapytania[k].a = a; zapytania[k].b = b; } else { // only_1 = false; long long a; scanf("%lld",&a); zapytania[k].type = type; zapytania[k].a = a; } } // if(only_1) solve_1(vec,n,q,zapytania); /*else { }*/ }
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 117 118 119 120 121 | #include<bits/stdc++.h> using namespace std; struct trie { int type; long long a,b; }; /*void wypisz(vector<long long> &vec) { for(int k=0;k<vec.size();k++) { cout << vec[k] << " "; } cout <<endl; }*/ void solve_1(vector<long long> &vec,int n,int q,vector<trie> &cos) { sort(vec.begin(),vec.end()); vector<long long>::iterator x; int p_1,p_2; int il=0; for(int k=0;k<q;k++) {if(cos[k].type==1){ x = lower_bound(vec.begin(),vec.end(),cos[k].a); if(cos[k].b <=cos[k].a) { printf("0\n"); continue; } if(x==vec.begin() && *x>=cos[k].a) { printf("-1\n"); continue; } while(*x>=cos[k].a)x--; p_1 = x-vec.begin()-1; p_2= x-vec.begin(); il=0; while(cos[k].a<cos[k].b) { x = lower_bound(vec.begin(),vec.end(),cos[k].a); while(*x>=cos[k].a)x--; if(p_2<=x-vec.begin()) p_2=x-vec.begin(); if(vec[p_2]<cos[k].a) { cos[k].a+=vec[p_2]; p_2++; il++; } else if(p_1>=0) { cos[k].a+=vec[p_1]; p_1--; il++; } else { printf("-1\n"); break; } } if(cos[k].a>=cos[k].b) printf("%d\n",il); } else if(cos[k].type==2) { x = lower_bound(vec.begin(),vec.end(),cos[k].a); vec.insert(x,cos[k].a); } else { x = lower_bound(vec.begin(),vec.end(),cos[k].a); vec.erase(x); } // wypisz(vec); } } int main() { int n; scanf("%d",&n); vector<long long> vec(n+1); for(int k=0;k<n;k++) scanf("%lld",&vec[k]); vec[n] = 1000000000000000000; int q; scanf("%d",&q); vector<trie> zapytania(q); // bool only_1 = true; for(int k=0;k<q;k++) { int type; scanf("%d",&type); if(type==1) { long long a,b; scanf("%lld%lld",&a,&b); zapytania[k].type = type; zapytania[k].a = a; zapytania[k].b = b; } else { // only_1 = false; long long a; scanf("%lld",&a); zapytania[k].type = type; zapytania[k].a = a; } } // if(only_1) solve_1(vec,n,q,zapytania); /*else { }*/ } |