Submission #719435

#TimeUsernameProblemLanguageResultExecution timeMemory
719435rainboyHappiness (Balkan15_HAPPINESS)C++17
100 / 100
1130 ms22960 KiB
#include "happiness.h" const int N = 200000, Q = 100000, K = 5, N_ = N + Q * K + 1; const long long A = 1000000000001; long long min(long long a, long long b) { return a < b ? a : b; } long long max(long long a, long long b) { return a > b ? a : b; } unsigned int X = 12345; int rand_() { return (X *= 3) >> 1; } int zz[N_], ll[N_], rr[N_], cc[N_], u_, l_, r_; long long xx[N_], ss[N_], dd[N_]; int node(long long x, int c) { static int _ = 1; zz[_] = rand_(); xx[_] = x, cc[_] = c; ss[_] = x <= A / c ? x * c : A; dd[_] = x; return _++; } void pul(int u) { int l = ll[u], r = rr[u], c = cc[u]; long long x = xx[u], y = x <= A / c ? x * c : A; ss[u] = min(min(ss[l] + y, A) + ss[r], A); dd[u] = max(max(dd[l], x - ss[l]), dd[r] - min(ss[l] + y, A)); } void split(int u, long long x) { if (u == 0) { u_ = l_ = r_ = 0; return; } if (xx[u] < x) { split(rr[u], x); rr[u] = l_, l_ = u; } else if (xx[u] > x) { split(ll[u], x); ll[u] = r_, r_ = u; } else { u_ = u, l_ = ll[u], r_ = rr[u]; ll[u] = rr[u] = 0; } pul(u); } int merge(int u, int v) { if (u == 0) return v; if (v == 0) return u; if (zz[u] < zz[v]) { rr[u] = merge(rr[u], v), pul(u); return u; } else { ll[v] = merge(u, ll[v]), pul(v); return v; } } void tr_add(long long x) { split(u_, x); if (u_ == 0) u_ = node(x, 1); else cc[u_]++, pul(u_); u_ = merge(merge(l_, u_), r_); } void tr_remove(long long x) { split(u_, x); if (cc[u_] == 1) u_ = 0; else cc[u_]--, pul(u_); u_ = merge(merge(l_, u_), r_); } bool init(int n, long long m, long long *cc) { u_ = 0; for (int i = 0; i < n; i++) tr_add(cc[i]); return dd[u_] <= 1; } bool is_happy(int type, int n, long long *cc) { for (int i = 0; i < n; i++) if (type == 1) tr_add(cc[i]); else tr_remove(cc[i]); return dd[u_] <= 1; }

Compilation message (stderr)

grader.cpp: In function 'int main()':
grader.cpp:16:12: warning: unused variable 'max_code' [-Wunused-variable]
   16 |  long long max_code;
      |            ^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...