#include <cstdio>
#include <set>
int main ()
{
int n, t, i;
long long w, k;
std::multiset <long long> W;
scanf ("%d", &n);
while (n--)
{
scanf ("%lld", &w);
W.insert (-w);
}
scanf ("%d", &n);
while (n--)
{
scanf ("%d%lld", &t, &w);
switch (t)
{
case 1:
scanf ("%lld", &k);
i = 0;
for (auto V=W; w < k; i++)
{
auto j=V.upper_bound (-w);
if (j==V.end ()) break;
w -= *j;
V.erase(j);
}
printf ("%d\n", w < k? -1: i);
break;
case 2:
W.insert (-w);
break;
case 3:
W.erase (W.find (-w));
}
}
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 | #include <cstdio> #include <set> int main () { int n, t, i; long long w, k; std::multiset <long long> W; scanf ("%d", &n); while (n--) { scanf ("%lld", &w); W.insert (-w); } scanf ("%d", &n); while (n--) { scanf ("%d%lld", &t, &w); switch (t) { case 1: scanf ("%lld", &k); i = 0; for (auto V=W; w < k; i++) { auto j=V.upper_bound (-w); if (j==V.end ()) break; w -= *j; V.erase(j); } printf ("%d\n", w < k? -1: i); break; case 2: W.insert (-w); break; case 3: W.erase (W.find (-w)); } } return 0; } |
English