#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';*/ } |
English