제출 #1189850

#제출 시각아이디문제언어결과실행 시간메모리
118985012345678Happiness (Balkan15_HAPPINESS)C++20
0 / 100
1 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) { if (!k) { while (1) { } } 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]); 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...