Submission #921675

#TimeUsernameProblemLanguageResultExecution timeMemory
921675asdasdqwerHappiness (Balkan15_HAPPINESS)C++14
60 / 100
3072 ms524292 KiB
#include "happiness.h" #include <bits/stdc++.h> using namespace std; struct Node { // sum that is required such that the first element of the subarray is chosen long long reqSum = 0; // sum of all elements in the subarray long long buildSum = 0; // index of left and right children int lIdx = -1, rIdx = -1; }; struct Segtree { const long long n=((long long)1LL)<<40; Node n1; vector<Node> seg; int pt=0; void init() { seg.assign((int)1e7 + 2*(int)1e6,n1); } Node combine(Node l, Node r, int id1, int id2) { Node ret; ret.lIdx = id1; ret.rIdx = id2; ret.buildSum = l.buildSum + r.buildSum; ret.reqSum = l.reqSum; if (r.buildSum != 0) ret.reqSum = max(l.reqSum, r.reqSum - l.buildSum); return ret; } void gen(int x, bool two, long long f) { if (seg[x].lIdx != -1) return; seg[x].lIdx = ++pt; if (two) { seg[pt].reqSum = f-1; } seg[x].rIdx = ++pt; if (two) { seg[pt].reqSum = f; } } void inc(long long i, long long v, int x, long long lx, long long rx) { if (rx-lx==1) { seg[x].buildSum += v; return; } gen(x, rx-lx==2,lx); long long m=(lx+rx)>>1; if (i<m)inc(i,v,seg[x].lIdx,lx,m); else inc(i,v,seg[x].rIdx,m,rx); seg[x]=combine(seg[seg[x].lIdx], seg[seg[x].rIdx], seg[x].lIdx, seg[x].rIdx); } void add(long long i) { inc(i, i, 0, 0, n); // cout<<"add coin "<<i<<": "<<seg[0].buildSum<<"\n"; } void sub(long long i) { inc(i, -i, 0, 0, n); // cout<<"remove coin "<<i<<": "<<seg[0].buildSum<<"\n"; } bool happy() { // cout<<seg[0].reqSum<<" "<<seg[0].buildSum<<"\n"; return seg[0].reqSum <= 0; } }; Segtree sg; bool init(int coinsCount, long long maxCoinSize, long long coins[]) { sg.init(); for (int i=0;i<coinsCount;i++) { sg.add(coins[i]); } return sg.happy(); } bool is_happy(int event, int32_t coinsCount, long long coins[]) { if (event == -1) { for (int i=0;i<coinsCount;i++) { sg.sub(coins[i]); } } else { for (int i=0;i<coinsCount;i++) { sg.add(coins[i]); } } return sg.happy(); }

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