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
#include <iostream>
#include <map>

int main()
{
  std::cin.tie(0);
  std::ios_base::sync_with_stdio(false);
  long long int n;
  std::map<long long int, long long int> fish;
  std::cin>>n;
  for (long long int nn = 0; nn < n; ++nn)
  {
    long long int w;
    std::cin>>w;
    ++fish[w];
  }
  long long int q;
  std::cin>>q;
  for(long long int qq = 0; qq < q; ++qq)
  {
    int opt;
    std::cin>>opt;
    switch(opt)
    {
      case 1:
      {
        long long int s, k;
        std::cin>>s>>k;
        std::map<long long int, long long int> fishCp (fish);
        long long int cnt = 0;
        long long int diff = k - s;
        bool ok = true;
        while(diff > 0)
        {
          if(fishCp.empty())
          {
            ok = false;
            break;
          }
          auto it = fishCp.lower_bound(s);
          if(it == fishCp.begin())
          {
            ok = false;
            break;
          }
          --it;
          diff -= it->first;
          s += it->first;
          if(it->second == 1)
          {
            fishCp.erase(it);
          }
          else
          {
            --it->second;
          }
          ++cnt;
        }
        if(ok)
        {
          std::cout<<cnt<<"\n";
        }
        else
        {
          std::cout<<"-1\n";
        }
        break;
      }
      case 2:
      {
        long long int w;
        std::cin>>w;
        ++fish[w];
        break;
      }
      case 3:
      {
        long long int w;
        std::cin>>w;
        if(fish[w] == 1)
        {
          fish.erase(w);
        }
        else
        {
          --fish[w];
        }
        break;
      }
    }
  }
}