#include <bits/stdc++.h> using namespace std; int n, q, A; long long B, C; int i; int wynik; multiset<long long>Rybki; multiset<long long>::iterator it=Rybki.begin(); int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // Dodaje n szprotek do multizbioru cin>>n; for (i=0; i<n; ++i){ long long A; cin>>A; Rybki.insert(A); } //Dodajemy pusty staw Rybki.insert(0); // Wczytuje q zapytan // O(?) cin>>q; while(q>0){ wynik=0; cin>>A; // Nic nie robi // Ma sprawdzac ile szprotek musi zjesc szczupak aby osiagnac swoja wage // Ma sprawdzac czy jest to mozliwe czy jest to mozliwe // O(?) if (A==1){ vector<long long>Zjedzone; cin>>B>>C; /*for (it=Rybki.begin(); it!=Rybki.end(); ++it) cout<<*it<<" "; cout<<"\n";*/ while(B<C){ it=Rybki.lower_bound(B); --it; if(*it==0){ wynik=-1; break; } else{ Zjedzone.push_back(*it); B+=*it; Rybki.erase(Rybki.lower_bound(*it)); ++wynik; } } for (i=0; i<Zjedzone.size(); ++i) Rybki.insert(Zjedzone[i]); cout<<wynik<<"\n"; } // Poprawnie dodaje po jednej szprotce na zapytanie // O(log(k)), k=Rybki.size() else if (A==2){ cin>>B; Rybki.insert(B); } // Poprawnie odejmuje po jednej szprotce na zapytanie // O(log^2(k)), k=Rybki.size() else{ cin>>B; Rybki.erase(Rybki.lower_bound(B)); }/* for (it=Rybki.begin(); it!=Rybki.end(); ++it) cout<<*it<<" "; cout<<"\n";*/ --q; } 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 | #include <bits/stdc++.h> using namespace std; int n, q, A; long long B, C; int i; int wynik; multiset<long long>Rybki; multiset<long long>::iterator it=Rybki.begin(); int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // Dodaje n szprotek do multizbioru cin>>n; for (i=0; i<n; ++i){ long long A; cin>>A; Rybki.insert(A); } //Dodajemy pusty staw Rybki.insert(0); // Wczytuje q zapytan // O(?) cin>>q; while(q>0){ wynik=0; cin>>A; // Nic nie robi // Ma sprawdzac ile szprotek musi zjesc szczupak aby osiagnac swoja wage // Ma sprawdzac czy jest to mozliwe czy jest to mozliwe // O(?) if (A==1){ vector<long long>Zjedzone; cin>>B>>C; /*for (it=Rybki.begin(); it!=Rybki.end(); ++it) cout<<*it<<" "; cout<<"\n";*/ while(B<C){ it=Rybki.lower_bound(B); --it; if(*it==0){ wynik=-1; break; } else{ Zjedzone.push_back(*it); B+=*it; Rybki.erase(Rybki.lower_bound(*it)); ++wynik; } } for (i=0; i<Zjedzone.size(); ++i) Rybki.insert(Zjedzone[i]); cout<<wynik<<"\n"; } // Poprawnie dodaje po jednej szprotce na zapytanie // O(log(k)), k=Rybki.size() else if (A==2){ cin>>B; Rybki.insert(B); } // Poprawnie odejmuje po jednej szprotce na zapytanie // O(log^2(k)), k=Rybki.size() else{ cin>>B; Rybki.erase(Rybki.lower_bound(B)); }/* for (it=Rybki.begin(); it!=Rybki.end(); ++it) cout<<*it<<" "; cout<<"\n";*/ --q; } return 0; } |