Submission #1296808

#TimeUsernameProblemLanguageResultExecution timeMemory
1296808NamnamseoDistributing Candies (IOI21_candies)C++20
0 / 100
220 ms30056 KiB
#include "candies.h" #include <vector> using namespace std; #define pb push_back using ll=long long; struct titem { ll sum, rmax, rmin; }; const int M = 262144; titem tree[M<<1]; void upd(int up, titem &&uv, int ti, int tl, int tr) { if (tl == tr) { tree[ti] = uv; return; } int md = (tl+tr)/2; if (up <= md) upd(up, move(uv), ti*2, tl, md); else upd(up, move(uv), ti*2+1, md+1, tr); tree[ti].sum = tree[ti*2].sum + tree[ti*2+1].sum; tree[ti].rmax = max(tree[ti*2].rmax + tree[ti*2+1].sum, tree[ti*2+1].rmax); tree[ti].rmin = min(tree[ti*2].rmin + tree[ti*2+1].sum, tree[ti*2+1].rmin); } vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) { int n = c.size(), q = l.size(); vector<vector<int>> events(n+1); for (int i=0; i<q; ++i) { events[l[i]].pb(i); events[r[i]+1].pb(i); } vector<int> ans(n); for (int i=0; i<n; ++i) { for (int qi: events[i]) { if (i == l[qi]) { upd(qi, titem{v[qi], max(0, v[qi]), min(0, v[qi])}, 1, 0, q-1); } else { upd(qi, titem{0, 0, 0}, 1, 0, q-1); } } int ti=1, tl=0, tr=q-1; ll brsum = 0, brmax = 0, brmin = 0; while (tl < tr) { int md = (tl+tr)/2; if (max(brsum + tree[ti*2+1].rmax, brmax)- min(brsum + tree[ti*2+1].rmin, brmin) <= c[i]) { brmax = max(brmax, brsum + tree[ti*2+1].rmax); brmin = min(brmin, brsum + tree[ti*2+1].rmin); brsum += tree[ti*2+1].sum; ti *= 2; tr = md; } else { ti = ti*2+1; tl = md+1; } } if (max(brsum + tree[ti].rmax, brmax) - min(brsum + tree[ti].rmin, brmin) <= c[i]) { ans[i] = tree[1].sum; } else { if (v[tl] > 0) { ans[i] = c[i] + brsum; } else { ans[i] = brsum; } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...