# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
917862 | vjudge1 | Happiness (Balkan15_HAPPINESS) | C++17 | 3720 ms | 524288 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "happiness.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N T[i]
struct node {
ll mx=0, lz=0;
int lc=0,rc=0;
} T[1<<24];
map<ll, int> mp;
int rt, cnt;
void pd(int i) {
if(N.lz) {
N.mx+=N.lz;
if(!N.lc)
N.lc=++cnt;
if(!N.rc)
N.rc=++cnt;
T[N.lc].lz+=N.lz;
T[N.rc].lz+=N.lz;
}
N.lz=0;
}
void upd(int &i,ll v,ll tl,ll tr=1e12,ll l=1,ll r=1e12) {
if(!i) i=++cnt;
else pd(i);
if(tl>r||tr<l)
return;
if(tl<=l&&r<=tr) {
N.lz+=v;
pd(i);
return;
}
if(tl<=l+r>>1||N.lc)
upd(N.lc,v,tl,tr,l,l+r>>1ll);
if(tr>l+r>>1||N.rc)
upd(N.rc,v,tl,tr,l+r+2>>1,r);
N.mx=max(T[N.lc].mx,T[N.rc].mx);
}
void add(ll val) {
upd(rt,-val,val+1);
if(!mp[val])
upd(rt,val,val,val);
mp[val]++;
}
void del(ll val) {
upd(rt,val,val+1);
mp[val]--;
if(!mp[val])
upd(rt,-val,val,val);
}
bool init(int coinsCount, ll maxCoinSize, ll coins[]) {
for(int i=0;i<coinsCount;i++)
add(coins[i]);
return T[rt].mx<2;
}
bool is_happy(int event, int coinsCount, ll coins[]) {
for(int i=0;i<coinsCount;i++)
(event+1?add:del)(coins[i]);
return T[rt].mx<2;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |