Submission #896636

#TimeUsernameProblemLanguageResultExecution timeMemory
896636aqxaArt Exhibition (JOI18_art)C++17
100 / 100
521 ms34132 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct segtree { vector<ll> tree, lazy; int n; segtree(int _n) : n(_n) { tree = vector<ll>(2 * n, 0); lazy = vector<ll>(2 * n, 0); } void push(int x, int l, int r) { tree[x] += lazy[x]; if (l != r) { int mid = (r + l) / 2; int z = x + 2 * (mid - l + 1); lazy[x + 1] += lazy[x]; lazy[z] += lazy[x]; } lazy[x] = 0; } void pull(int x, int L, int R) { int mid = (L + R) / 2; int z = x + 2 * (mid - L + 1); tree[x] = max(tree[x + 1], tree[z]); } void upd(int l, int r, ll v, int L, int R, int x) { push(x, L, R); if (r < L || R < l) return; if (l <= L && R <= r) { lazy[x] = v; push(x, L, R); return; } int mid = (L + R) / 2; int z = x + 2 * (mid - L + 1); upd(l, r, v, L, mid, x + 1); upd(l, r, v, mid + 1, R, z); pull(x, L, R); } void upd(int l, int r, ll v) { upd(l, r, v, 0, n - 1, 0); } ll get(int l, int r, int L, int R, int x) { push(x, L, R); if (r < L || R < l) return -9e18; if (l <= L && R <= r) return tree[x]; int mid = (L + R) / 2; int z = x + 2 * (mid - L + 1); return max(get(l, r, L, mid, x + 1), get(l, r, mid + 1, R, z)); } ll get(int l, int r) { return get(l, r, 0, n - 1, 0); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<pair<ll, ll>> a(n); for (int i = 0; i < n; ++i) { cin >> a[i].first >> a[i].second; } sort(a.begin(), a.end()); segtree st(n); ll S = 0; for (int i = 0; i < n; ++i) { S += a[i].second; st.upd(i, i, S - (a[i].first - a[0].first)); } ll ans = st.get(0, n - 1); for (int i = 0; i < n - 1; ++i) { st.upd(i + 1, n - 1, a[i + 1].first - a[i].first - a[i].second); ans = max(ans, st.get(i + 1, n - 1)); } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...