Submission #1225481

#TimeUsernameProblemLanguageResultExecution timeMemory
1225481jerzykMixture (BOI20_mixture)C++20
100 / 100
132 ms9268 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int N = 100 * 1000 + 7; const ld I = (ld)1000000 * (ld)1000000 * (ld)1000000; ll il1, il2; pair<int, ld> pkt[N]; map<ld, int> dody, ujy; pair<int, ld> Change(ll a, ll b, ll c, ll ap, ll bp, ll cp) { pair<int, ld> w; ld x, y; ll gcd; gcd = __gcd(ap, __gcd(bp, cp)); ap /= gcd; bp /= gcd; cp /= gcd; gcd = __gcd(a, __gcd(b, c)); a /= gcd; b /= gcd; c /= gcd; x = (ld)(((a + b) * (ap + bp + cp) - (ap + bp) * (a + b + c))); y = (ld)(((a + c) * (ap + bp + cp) - (ap + cp) * (a + b + c))); w.first = 0; if(x != (ld)0 || y != (ld)0) { if(y > (ld)0 || (y == (ld)0 && x > (ld)0)) w.first = 1; else w.first = -1; } //cout << a << " " << b << " " << c << " " << ap << " " << bp << " " << cp << "\n"; //cout << x << " " << y << "\n"; if(y == (ld)0) w.second = I; else w.second = x / y; return w; } bool Czy3() { ld d1, d2, u1, u2; bool w1, w2; if(dody.size() == 0 || ujy.size() == 0) return false; d1 = (*dody.begin()).first; d2 = (*dody.rbegin()).first; u1 = (*ujy.begin()).first; u2 = (*ujy.rbegin()).first; w1 = false; if(ujy.lower_bound(d1) != ujy.end()) if((*ujy.lower_bound(d1)).first <= d2) w1 = true; w2 = false; if(dody.lower_bound(u1) != dody.end()) if((*dody.lower_bound((u1))).first <= u2) w2 = true; if(w1 || w2) return true; return false; } void Dodaj(int ws, ld v) { if(ws == 0) { ++il1; return; } if(ws == 1) { if(ujy.find(v) != ujy.end()) il2 += (ll)ujy[v]; if(dody.find(v) == dody.end()) dody[v] = 0; ++dody[v]; }else { if(dody.find(v) != dody.end()) il2 += (ll)dody[v]; if(ujy.find(v) == ujy.end()) ujy[v] = 0; ++ujy[v]; } } void Usun(int ws, ld v) { if(ws == 0) { --il1; return; } if(ws == 1) { if(ujy.find(v) != ujy.end()) il2 -= (ll)ujy[v]; --dody[v]; if(dody[v] == 0) dody.erase(v); }else { if(dody.find(v) != dody.end()) il2 -= (ll)dody[v]; --ujy[v]; if(ujy[v] == 0) ujy.erase(v); } } void Mixture() { int n, l, v, w, i; ll a, b, c, a1, b1, c1; char x; l = 0; cin >> a1 >> b1 >> c1; cin >> n; il1 = 0LL; il2 = 0LL; for(i = 1; i <= n; ++i) { cin >> x; if(x == 'A') { cin >> a >> b >> c; ++l; pkt[l] = Change(a, b, c, a1, b1, c1); //cout << l << " " << pkt[l].first << " " << pkt[l].second << "\n"; Dodaj(pkt[l].first, pkt[l].second); } if(x == 'R') { cin >> v; Usun(pkt[v].first, pkt[v].second); } //cout << "il2: " << il2 << "\n"; w = 0; if(Czy3()) w = 3; if(il2 > 0) w = 2; if(il1 > 0) w = 1; cout << w << "\n"; } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); Mixture(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...