제출 #752038

#제출 시각아이디문제언어결과실행 시간메모리
752038vjudge1Art Exhibition (JOI18_art)C++17
100 / 100
296 ms30712 KiB
#include<bits/stdc++.h>
#define ii pair<long long, long long>
#define fi first
#define se second
using namespace std;
const int N = 500002;
const long long inf = 1e16;
int n;
ii a[N];
long long sum[N], r1[N], r2[N], tree[4 * N];

istream & operator >> (istream &inp, ii &m){
    inp >> m.fi >> m.se;
    return inp;
}

void build(int s, int l, int r){
    if(l == r){
        tree[s] = r2[l];
        return;
    }
    int mid = (l + r) / 2;
    build(2 * s, l, mid);
    build(2 * s + 1, mid + 1, r);
    tree[s] = min(tree[2 * s], tree[2 * s + 1]);
}

long long get(int s, int l, int r, int u, int v){
    if(l > v || r < u)
        return inf;
    if(l >= u && r <= v)
        return tree[s];
    int mid = (l + r) / 2;
    return min(get(2 * s, l, mid, u, v), get(2 * s + 1, mid + 1, r, u, v));
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n;
    for(int i = 1; i <= n; ++i)
        cin >> a[i];
    sort(a + 1, a + n + 1);
    for(int i = 1; i <= n; ++i){
        sum[i] = sum[i - 1] + a[i].se;
        r1[i] = sum[i] - a[i].fi;
        r2[i - 1] = sum[i - 1] - a[i].fi;
    }
    build(1, 0, n - 1);
    long long res = 0;
    for(int i = 1; i <= n; ++i)
        res = max(res, r1[i] - get(1, 0, n - 1, 0, i - 1));
    cout << res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...