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
    {

    }*/
}