//
// main.cpp
// sis
//
// Created by Mikołaj Korulczyk on 12/12/2019.
// Copyright © 2019 Mikołaj Korulczyk. All rights reserved.
//
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
unordered_map<long long, long long> ilosc_szprotek;
set<long long> wielkosci_szprotek;
vector<long long> usuniete;
long long n;
long long q;
long long w;
long long s, k;
long long s2;
long long zapytanie;
long long zjedzone;
set<long long>::iterator itr_w;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> w;
if(ilosc_szprotek[w] == 0) {
wielkosci_szprotek.insert(w);
}
ilosc_szprotek[w]++;
}
cin >> q;
while(q--) {
cin >> zapytanie;
if(zapytanie == 1) {
cin >> s >> k;
usuniete.clear();
s2 = s;
zjedzone = 0;
while(s2 < k && wielkosci_szprotek.size()) {
itr_w = wielkosci_szprotek.lower_bound(s2);
w = *itr_w;
if(itr_w != wielkosci_szprotek.begin()) {
itr_w--;
w = *itr_w;
} else {
break;
}
s2 += w;
zjedzone++;
usuniete.push_back(w);
ilosc_szprotek[w]--;
if(ilosc_szprotek[w] == 0) {
wielkosci_szprotek.erase(wielkosci_szprotek.find(w));
}
}
if(s2 >= k) {
cout << zjedzone << endl;
} else {
cout << -1 << endl;
}
for(auto i: usuniete) {
if(ilosc_szprotek[i] == 0) {
wielkosci_szprotek.insert(i);
}
ilosc_szprotek[i]++;
}
} else if(zapytanie == 2) {
cin >> w;
if(ilosc_szprotek[w] == 0) {
wielkosci_szprotek.insert(w);
}
ilosc_szprotek[w]++;
} else {
cin >> w;
ilosc_szprotek[w]--;
if(ilosc_szprotek[w] == 0) {
wielkosci_szprotek.erase(wielkosci_szprotek.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 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 | // // main.cpp // sis // // Created by Mikołaj Korulczyk on 12/12/2019. // Copyright © 2019 Mikołaj Korulczyk. All rights reserved. // #include <bits/stdc++.h> #include <unordered_map> using namespace std; unordered_map<long long, long long> ilosc_szprotek; set<long long> wielkosci_szprotek; vector<long long> usuniete; long long n; long long q; long long w; long long s, k; long long s2; long long zapytanie; long long zjedzone; set<long long>::iterator itr_w; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n; i++) { cin >> w; if(ilosc_szprotek[w] == 0) { wielkosci_szprotek.insert(w); } ilosc_szprotek[w]++; } cin >> q; while(q--) { cin >> zapytanie; if(zapytanie == 1) { cin >> s >> k; usuniete.clear(); s2 = s; zjedzone = 0; while(s2 < k && wielkosci_szprotek.size()) { itr_w = wielkosci_szprotek.lower_bound(s2); w = *itr_w; if(itr_w != wielkosci_szprotek.begin()) { itr_w--; w = *itr_w; } else { break; } s2 += w; zjedzone++; usuniete.push_back(w); ilosc_szprotek[w]--; if(ilosc_szprotek[w] == 0) { wielkosci_szprotek.erase(wielkosci_szprotek.find(w)); } } if(s2 >= k) { cout << zjedzone << endl; } else { cout << -1 << endl; } for(auto i: usuniete) { if(ilosc_szprotek[i] == 0) { wielkosci_szprotek.insert(i); } ilosc_szprotek[i]++; } } else if(zapytanie == 2) { cin >> w; if(ilosc_szprotek[w] == 0) { wielkosci_szprotek.insert(w); } ilosc_szprotek[w]++; } else { cin >> w; ilosc_szprotek[w]--; if(ilosc_szprotek[w] == 0) { wielkosci_szprotek.erase(wielkosci_szprotek.find(w)); } } } return 0; } |
English