Submission #441277

#TimeUsernameProblemLanguageResultExecution timeMemory
441277JovanBHappiness (Balkan15_HAPPINESS)C++17
60 / 100
1579 ms246776 KiB
#include <bits/stdc++.h> #include "happiness.h" using namespace std; using ll = long long; ll MAXV = 1000000000000LL; const int MAXC = 5000000; multiset <ll> brojevi; int idxx; struct Segment{ int L, R; ll lazy; ll mx; } seg[MAXC]; int cnode(ll r){ ++idxx; seg[idxx].mx = r; return idxx; } void propagate(int node, ll l, ll r){ seg[node].mx += seg[node].lazy; if(l == r){ seg[node].lazy = 0; return; } ll mid = (l+r)/2; if(!seg[node].L) seg[node].L = cnode(mid); if(!seg[node].R) seg[node].R = cnode(r); seg[seg[node].L].lazy += seg[node].lazy; seg[seg[node].R].lazy += seg[node].lazy; seg[node].lazy = 0; } void upd(int node, ll l, ll r, ll tl, ll tr, ll val){ propagate(node, l, r); if(tl > r || l > tr) return; if(tl <= l && r <= tr){ seg[node].lazy += val; propagate(node, l, r); return; } ll mid = (l+r)/2; if(!seg[node].L) seg[node].L = cnode(mid); if(!seg[node].R) seg[node].R = cnode(r); upd(seg[node].L, l, mid, tl, tr, val); upd(seg[node].R, mid+1, r, tl, tr, val); seg[node].mx = max(seg[seg[node].L].mx, seg[seg[node].R].mx); } ll query(int node, ll l, ll r, ll tl, ll tr){ propagate(node, l, r); if(tl > r || l > tr) return 0; if(tl <= l && r <= tr){ return seg[node].mx; } ll mid = (l+r)/2; if(!seg[node].L) seg[node].L = cnode(mid); if(!seg[node].R) seg[node].R = cnode(r); return max(query(seg[node].L, l, mid, tl, tr), query(seg[node].R, mid+1, r, tl, tr)); } bool init(int coinsCount, long long maxCoinSize, long long coins[]) { MAXV = maxCoinSize+5; idxx = 1; for(int i=0; i<coinsCount; i++){ upd(1, 1, MAXV, coins[i]+1, MAXV, -coins[i]); brojevi.insert(coins[i]); } if(brojevi.empty()) return 1; ll largest = *brojevi.rbegin(); return query(1, 1, MAXV, 1, largest) <= 1; } bool is_happy(int event, int coinsCount, long long coins[]) { for(int i=0; i<coinsCount; i++){ if(event == 1){ upd(1, 1, MAXV, coins[i]+1, MAXV, -coins[i]); brojevi.insert(coins[i]); } else{ upd(1, 1, MAXV, coins[i]+1, MAXV, coins[i]); brojevi.erase(brojevi.find(coins[i])); } } if(brojevi.empty()) return 1; ll largest = *brojevi.rbegin(); return query(1, 1, MAXV, 1, largest) <= 1; } /* 5 100 4 8 1 2 16 2 -1 2 2 8 1 3 7 9 2 */

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