Submission #529712

#TimeUsernameProblemLanguageResultExecution timeMemory
529712Alex_tz307Divide and conquer (IZhO14_divide)C++17
100 / 100
90 ms5996 KiB
#include <bits/stdc++.h> using namespace std; const int kN = 1e5; int x[1 + kN], e[1 + kN]; int64_t sum[1 + kN]; void maxSelf(int64_t &x, int64_t y) { if (x < y) { x = y; } } struct ST { int n; vector<int64_t> t, lazy; ST(int N) : n(N) { int dim = 1; while (dim < n) { dim *= 2; } dim *= 2; t.resize(dim); lazy.resize(dim); } void updateNode(int x, int64_t v) { t[x] += v; lazy[x] += v; } void push(int x) { if (lazy[x] == 0) { return; } for (int i = 0; i < 2; ++i) { updateNode(x * 2 + i, lazy[x]); } lazy[x] = 0; } void update(int x, int lx, int rx, int st, int dr, int v) { if (st <= lx && rx <= dr) { updateNode(x, v); return; } push(x); int mid = (lx + rx) / 2; if (st <= mid) { update(x * 2, lx, mid, st, dr, v); } if (mid < dr) { update(x * 2 + 1, mid + 1, rx, st, dr, v); } t[x] = max(t[x * 2], t[x * 2 + 1]); } void update(int st, int dr, int64_t v) { if (dr < st) { return; } update(1, 1, n, st, dr, v); } int query(int x, int lx, int rx, int st, int dr) { if (lx == rx) { if (t[x] < 0) { return 0; } return lx; } push(x); int mid = (lx + rx) / 2, ans = 0; if (st <= mid && t[x * 2] >= 0) { ans = query(x * 2, lx, mid, st, dr); } if (ans == 0 && mid < dr && t[x * 2 + 1] >= 0) { ans = query(x * 2 + 1, mid + 1, rx, st, dr); } return ans; } int query(int st, int dr) { return query(1, 1, n, st, dr); } }; void testCase() { int n; cin >> n; for (int i = 1; i <= n; ++i) { int g; cin >> x[i] >> g >> e[i]; sum[i] = sum[i - 1] + g; } ST t(n); int64_t ans = 0; for (int r = 1; r <= n; ++r) { t.update(1, r - 1, e[r] - (x[r] - x[r - 1])); t.update(r, r, e[r]); int l = t.query(1, r); maxSelf(ans, sum[r] - sum[l - 1]); } cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int tests = 1; for (int tc = 0; tc < tests; ++tc) { testCase(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...