#include <iostream> #include <vector> #include <algorithm> #include <set> #define ll long long using namespace std; //lower_bound - pierwszy >= szukanemu //upper_bound - pierwszy wiekszy const ll INF=1e18; ll n, q, type, waga; multiset<ll> staw; void atakSzczupaka() { ll curr, last, res=0; cin >> curr >> last; vector<ll> veq; bool pos=1; while(curr < last) { //ll szprot = *(upper_bound(staw.begin(), staw.end(), -curr)); ll szprot = *(staw.upper_bound(-curr)); if(szprot==INF) { pos=0; break; } curr -= szprot; veq.push_back(szprot); staw.erase(staw.find(szprot)); res++; } for(int i=0; i<veq.size(); i++) staw.insert(veq[i]); if(pos) { cout << res << '\n'; return; } cout << -1 << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; while(n--) { ll temp; cin >> temp; staw.insert(-temp); } staw.insert(INF); cin >> q; while(q--) { cin >> type; if(type==1) { atakSzczupaka(); } else if(type==2) { cin >> waga; staw.insert(-waga); } else { cin >> waga; staw.erase(staw.find(-waga)); } } /*for(auto it=veq.begin(); it!=veq.end(); it++) cout << *it << ' '; cout << '\n'; cout << *(upper_bound(veq.begin(), veq.end(), 0)) << '\n';*/ }
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 | #include <iostream> #include <vector> #include <algorithm> #include <set> #define ll long long using namespace std; //lower_bound - pierwszy >= szukanemu //upper_bound - pierwszy wiekszy const ll INF=1e18; ll n, q, type, waga; multiset<ll> staw; void atakSzczupaka() { ll curr, last, res=0; cin >> curr >> last; vector<ll> veq; bool pos=1; while(curr < last) { //ll szprot = *(upper_bound(staw.begin(), staw.end(), -curr)); ll szprot = *(staw.upper_bound(-curr)); if(szprot==INF) { pos=0; break; } curr -= szprot; veq.push_back(szprot); staw.erase(staw.find(szprot)); res++; } for(int i=0; i<veq.size(); i++) staw.insert(veq[i]); if(pos) { cout << res << '\n'; return; } cout << -1 << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; while(n--) { ll temp; cin >> temp; staw.insert(-temp); } staw.insert(INF); cin >> q; while(q--) { cin >> type; if(type==1) { atakSzczupaka(); } else if(type==2) { cin >> waga; staw.insert(-waga); } else { cin >> waga; staw.erase(staw.find(-waga)); } } /*for(auto it=veq.begin(); it!=veq.end(); it++) cout << *it << ' '; cout << '\n'; cout << *(upper_bound(veq.begin(), veq.end(), 0)) << '\n';*/ } |