제출 #889242

#제출 시각아이디문제언어결과실행 시간메모리
889242alexander707070Art Exhibition (JOI18_art)C++14
100 / 100
171 ms21076 KiB
#include<bits/stdc++.h>
#define MAXN 500007
using namespace std;

const long long inf=1e18;

struct pic{
    long long sz,cost;
};

int n;
pic c[MAXN];
long long ans;

bool cmp(pic fr,pic sc){
    return fr.sz<sc.sz;
}

void solve(int l,int r){
    if(l>r)return;
    if(l==r){
        ans=max(ans,c[l].cost);
        return;
    }

    int mid=(l+r)/2;

    long long maxpref=0,maxsuff=0,sum;

    sum=0;
    for(int i=mid;i>=l;i--){
        sum+=c[i].cost;
        maxpref=max(maxpref,sum-(c[mid].sz-c[i].sz));
    }

    sum=0;
    for(int i=mid+1;i<=r;i++){
        sum+=c[i].cost;
        maxsuff=max(maxsuff,sum-(c[i].sz-c[mid+1].sz));
    }

    ans=max(ans,maxpref+maxsuff-(c[mid+1].sz-c[mid].sz));

    solve(l,mid);
    solve(mid+1,r);
}

int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>c[i].sz>>c[i].cost;
    }

    sort(c+1,c+n+1,cmp);

    solve(1,n);

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