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...