Submission #526255

#TimeUsernameProblemLanguageResultExecution timeMemory
526255maks007Divide and conquer (IZhO14_divide)C++14
100 / 100
120 ms7496 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define inf (int)(1e18) vector <int> t; int k = 1; void update(const int val, const int pos, int vl = 0, int vr = k - 1, int v = 0) { if(vl == vr) { t[v] = val; return; } int vm = (vl + vr) >> 1; if(pos <= vm) update(val, pos, vl, vm, 2*v+1); else update(val, pos, vm+1, vr, 2*v+2); t[v] = min(t[2*v+1], t[2*v+2]); } int get(int x, int vl = 0, int vr = k - 1, int v = 0) { if(vl == vr) return vl; else { int vm = (vl+vr) >> 1; if(x >= t[2*v+1]) { return get(x, vl, vm, 2*v+1); }else return get(x, vm+1, vr, 2*v+2); } } int32_t main(void) { int n; cin >> n; while(k < n) k <<= 1; t.resize(2*k-1, inf); vector <int> energy(n), gold(n), a(n); for(int i = 0; i < n; i ++) { cin >> a[i]; int ener, gol; cin >> gol >> ener; update((i-1<0?0:energy[i-1]) - a[i], i); if(i == 0) energy[i] = ener; else energy[i] = energy[i - 1] + ener; if(i == 0) gold[i] = gol; else gold[i] = gold[i - 1] + gol; } int mx = 0; for(int i = 0; i < n; i ++) { int ss = get(energy[i] - a[i]); mx = max(mx, gold[i] - (ss-1<0?0:gold[ss-1])); } cout << mx; return false; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...