제출 #237414

#제출 시각아이디문제언어결과실행 시간메모리
237414haengsyoArt Exhibition (JOI18_art)C++14
100 / 100
300 ms21496 KiB
#pragma GCC optimize("O3")

#include "bits/stdc++.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
tree<int,int,greater<int>,rb_tree_tag,tree_order_statistics_node_update> map_t;
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define F0R(i, a) for(int i = 0; i < (a); ++i)
#define sz(x) (int)x.size()
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
#define REV(x) reverse(x.begin(),x.end())
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};
const int mxN=5e5+5;
const ll INF=1e17;
pair<ll,int> arr[mxN];
ll pref[mxN];
int n;
ll t[4*mxN];

void build(int v,int tl,int tr) {
    if(tl==tr) {
        t[v]=pref[tl];
        return;
    }
    int mid=tl+(tr-tl)/2;
    build(2*v,tl,mid);
    build(2*v+1,mid+1,tr);
    t[v]=max(t[2*v],t[2*v+1]);
}

ll qry(int v,int tl,int tr,int l,int r) {
    if(tl>r || tr<l)
        return -INF;
    if(tl>=l && tr<=r)
        return t[v];
    int mid=tl+(tr-tl)/2;
    return max(qry(2*v,tl,mid,l,r),qry(2*v+1,mid+1,tr,l,r));
}

int main() {
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    cin >> n;
    F0R(i,n)
        cin >> arr[i].first >> arr[i].second;
    sort(arr,arr+n);
    pref[0]=arr[0].second;
    FOR(i,1,n)
        pref[i]=pref[i-1]+arr[i].second;
    F0R(i,n)
        pref[i]-=arr[i].first;
    build(1,0,n-1);
    ll best=-INF;
    F0R(i,n) {
        ll val=qry(1,0,n-1,i,n-1);
        ll bef=0;
        if(i!=0)
            bef=pref[i-1]+arr[i-1].first;
        best=max(best,val+arr[i].first-bef);
    }
    cout << best;

    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...