#include <bits/stdc++.h> #define DEBUG if(0) #define COUT cout << "\e[36m" #define ENDL "\e[39m" << endl #define VAR(v) " [\e[32m" << #v << "\e[36m=\e[91m" << v << "\e[36m] " using namespace std; typedef long long LL; int n; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; multiset<LL> fishset; for (int i = 0; i < n; ++i) { LL a; cin >> a; fishset.insert(a); } int q; cin >> q; while(q--) { DEBUG for(auto el : fishset) COUT << el << " "; DEBUG COUT << ENDL; int type; cin >> type; if(type == 1) /// SZCZUPAK ATTACK! { long long smass, kmass; cin >> smass >> kmass; DEBUG COUT << "ATTACK" << VAR(smass) << VAR(kmass) << ENDL; vector<LL> removed; while(1) { if(smass >= kmass) { cout << removed.size() << "\n"; break; } set<LL>::iterator lowerb = fishset.lower_bound(smass); if(lowerb == fishset.begin()) { cout << "-1\n"; break; } //DEBUG COUT << "\t" << VAR(*lowerb) << ENDL; --lowerb; DEBUG COUT << "\t" << VAR(*lowerb) << ENDL; smass += *lowerb; removed.push_back(*lowerb); fishset.erase(lowerb); } while(!removed.empty()) { fishset.insert(removed.back()); removed.pop_back(); } } else if(type == 2) ///SZPROTA ADD! { int mass; cin >> mass; DEBUG COUT << "ADD" << VAR(mass) << ENDL; fishset.insert(mass); } else if(type == 3) ///SZPROTA REMOVE! { int mass; cin >> mass; DEBUG COUT << "REMOVE" << VAR(mass) << ENDL; fishset.erase(fishset.find(mass)); } } 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 | #include <bits/stdc++.h> #define DEBUG if(0) #define COUT cout << "\e[36m" #define ENDL "\e[39m" << endl #define VAR(v) " [\e[32m" << #v << "\e[36m=\e[91m" << v << "\e[36m] " using namespace std; typedef long long LL; int n; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n; multiset<LL> fishset; for (int i = 0; i < n; ++i) { LL a; cin >> a; fishset.insert(a); } int q; cin >> q; while(q--) { DEBUG for(auto el : fishset) COUT << el << " "; DEBUG COUT << ENDL; int type; cin >> type; if(type == 1) /// SZCZUPAK ATTACK! { long long smass, kmass; cin >> smass >> kmass; DEBUG COUT << "ATTACK" << VAR(smass) << VAR(kmass) << ENDL; vector<LL> removed; while(1) { if(smass >= kmass) { cout << removed.size() << "\n"; break; } set<LL>::iterator lowerb = fishset.lower_bound(smass); if(lowerb == fishset.begin()) { cout << "-1\n"; break; } //DEBUG COUT << "\t" << VAR(*lowerb) << ENDL; --lowerb; DEBUG COUT << "\t" << VAR(*lowerb) << ENDL; smass += *lowerb; removed.push_back(*lowerb); fishset.erase(lowerb); } while(!removed.empty()) { fishset.insert(removed.back()); removed.pop_back(); } } else if(type == 2) ///SZPROTA ADD! { int mass; cin >> mass; DEBUG COUT << "ADD" << VAR(mass) << ENDL; fishset.insert(mass); } else if(type == 3) ///SZPROTA REMOVE! { int mass; cin >> mass; DEBUG COUT << "REMOVE" << VAR(mass) << ENDL; fishset.erase(fishset.find(mass)); } } return 0; } |