#include <bits/stdc++.h> #include <set> #include <vector> using namespace std; multiset<long long> staw; long long redukuj[400000]; int redukuj_size = 0; long long s,k; void ile_szprotek(){ //cout<<"szczupak mam: "<<s<<" chce miec: "<<k<<"\n"; redukuj_size = 0; long long ile = 0 ; while(1){ if(k<=s)break; auto it = staw.lower_bound(s-1); if(*it==-1)break; while(*it >= s)it--; if(*it==-1)break; s+=(*it); redukuj[redukuj_size++]=(*it); staw.erase(it); ile++; // cout<<"mam: "<<s<<" chce miec: "<<k<<"\n"; } for(int i = 0 ;i<redukuj_size;i++) staw.insert(redukuj[i]); if(s<k){ile = -1;} cout<<ile<<"\n"; } int main() { int n, q; long long w; int akcja; cin >> n; while (n--) { cin >> w; staw.insert(w); } staw.insert(-1); staw.insert(1000000000000000000ll);//nie wpływa bo nigdy jej nie zje; cin >> q; while (q--) { cin >> akcja; if (akcja == 1) { cin>>s>>k; ile_szprotek(); } else if (akcja == 2) { cin >> w; staw.insert(w); } else if (akcja == 3) { cin >> w; staw.erase(staw.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 | #include <bits/stdc++.h> #include <set> #include <vector> using namespace std; multiset<long long> staw; long long redukuj[400000]; int redukuj_size = 0; long long s,k; void ile_szprotek(){ //cout<<"szczupak mam: "<<s<<" chce miec: "<<k<<"\n"; redukuj_size = 0; long long ile = 0 ; while(1){ if(k<=s)break; auto it = staw.lower_bound(s-1); if(*it==-1)break; while(*it >= s)it--; if(*it==-1)break; s+=(*it); redukuj[redukuj_size++]=(*it); staw.erase(it); ile++; // cout<<"mam: "<<s<<" chce miec: "<<k<<"\n"; } for(int i = 0 ;i<redukuj_size;i++) staw.insert(redukuj[i]); if(s<k){ile = -1;} cout<<ile<<"\n"; } int main() { int n, q; long long w; int akcja; cin >> n; while (n--) { cin >> w; staw.insert(w); } staw.insert(-1); staw.insert(1000000000000000000ll);//nie wpływa bo nigdy jej nie zje; cin >> q; while (q--) { cin >> akcja; if (akcja == 1) { cin>>s>>k; ile_szprotek(); } else if (akcja == 2) { cin >> w; staw.insert(w); } else if (akcja == 3) { cin >> w; staw.erase(staw.find(w)); } } return 0; } |