제출 #1189854

#제출 시각아이디문제언어결과실행 시간메모리
118985412345678Happiness (Balkan15_HAPPINESS)C++20
0 / 100
2093 ms320 KiB
#include "happiness.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const ll nx=1e12, inf=1e18;

multiset<ll> ms;

struct sparsesegtree
{
	struct node
	{
		ll mx, lz;
		node *l, *r;
		node(): mx(-inf), lz(0){}
	};
	typedef node* pnode;
	pnode rt=new node();
	void apply(pnode &k, ll vl)
	{
		if (!k) k=new node();
		k->mx+=vl;
		k->lz+=vl;
	}
	void pushlz(pnode &k)
	{
		apply(k->l, k->lz);
		apply(k->r, k->lz);
		k->lz=0;
	}
	void update(ll l, ll r, pnode &k, ll ql, ll qr, ll vl)
	{
		if (qr<l||r<ql||qr<ql) return;
		if (ql<=l&&r<=qr) return apply(k, vl);
		ll md=(l+r)/2;
		pushlz(k);
		update(l, md, k->l, ql, qr, vl);
		update(md+1, r, k->r, ql, qr, vl);
		k->mx=max(k->l->mx, k->r->mx);
	}
} s;

void add(ll x)
{
	if (ms.find(x)==ms.end()) s.update(1, inf, s.rt, x, x, inf+x);
	ms.insert(x);
	s.update(1, inf, s.rt, x+1, inf, -x);
}

void rem(ll x)
{
	s.update(1, inf, s.rt, x+1, inf, +x);
	ms.erase(ms.find(x));
	if (ms.find(x)==ms.end()) s.update(1, inf, s.rt, x, x, -inf-x);
}

bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
	for (int i=0; i<coinsCount; i++) add(coins[i]);
	while (1)
	{
		
	}
	if (ms.empty()) return 1;
	return ((*ms.begin())==1)&&(s.rt->mx<=1);
}

bool is_happy(int event, int coinsCount, long long coins[]) {
	for (int i=0; i<coinsCount; i++)
	{
		if (event==-1) rem(coins[i]);
		else add(coins[i]);
	}
	//cout<<"after "<<s.rt->mx<<'\n';
	if (ms.empty()) return 1;
	return ((*ms.begin())==1)&&(s.rt->mx<=1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...