Submission #1033839

#TimeUsernameProblemLanguageResultExecution timeMemory
1033839vjudge1Art Exhibition (JOI18_art)C++17
100 / 100
234 ms31336 KiB
#include<bits/stdc++.h>

using namespace std;
#define int long long
int n;
pair<int, int> a[500005];
struct Segtree {
    int val[2000005], lazy[2000005];
    void push(int id, int l, int r) {
        val[id] += lazy[id];
        if(l != r) lazy[id*2] += lazy[id], lazy[id*2+1] += lazy[id];
        lazy[id] = 0;
    }
    void update(int id, int l, int r, int u, int v, int nw) {
        if(l > v || r < u) return;
        if(l >= u && r <= v) {
            val[id] += nw;
            if(l != r) {
                lazy[id*2] += nw;
                lazy[id*2+1] += nw;
            }
            return;
        }
        int mid = (l + r) / 2;
        update(id*2, l, mid, u, v, nw);
        update(id*2+1, mid + 1, r, u, v, nw);
        val[id] = max(val[id*2], val[id*2+1]);
    }
} tree;
void solve() {
    cin >> n;
    int res = 0;
    for (int i = 1; i <= n; i++) cin >> a[i].first >> a[i].second, res = max(res, a[i].second);
    sort(a+1,a+1+n);
    for (int i = 1; i <= n; i++) {
        tree.update(1, 1, n, 1, i-1, a[i].second - (a[i].first - a[i-1].first));
        tree.update(1, 1, n, i, i, a[i].second);
        res = max(res, tree.val[1]);
    }
    cout << res;
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int t = 1;
    // cin >> t;
    while(t--) {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...