// // 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; } |