Submission #1323292

#TimeUsernameProblemLanguageResultExecution timeMemory
1323292aritro_Art Exhibition (JOI18_art)C++20
100 / 100
136 ms19776 KiB
#include<bits/stdc++.h>
using namespace std;

#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template <typename T> using ordset = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

/*
less<T> can be changed to:
1. less_equal<T>
2. greater<T>

ordered_set functions:
1. *(os.find_by_order(x)) -> return the value at position x (0 base)
2. os.order_of_key(x) -> return the number of elements less than x
*/

typedef long long ll;
#define int ll
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

const int MOD=1000000007;

#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))

#define fios(); ios_base::sync_with_stdio(0);cin.tie(0);
#define fraction(x); cout.unsetf(ios::floatfield); cout.precision(x); cout.setf(ios::fixed,ios::floatfield);
#define file(); freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);

void solve(){
    int n;
    cin>>n;
    vector<pair<int,int>> a(n);
    for(int i=0;i<n;i++) cin>>a[i].ff>>a[i].ss;
    sort(all(a));
    int preSum[n+1]={0}; //presum on a[i].ss for all i
    for(int i=0;i<n;i++) preSum[i+1]=preSum[i]+a[i].ss;
    ///for(int i=1;i<=n;i++) cout<<preSum[i]<<' ';
    //cout<<endl;
    int x[n];
    for(int i=0;i<n;i++) x[i]=preSum[i+1]-a[i].ff;
    //for(int i=1;i<=n;i++) cout<<x[i-1]<<' ';
    //cout<<endl;
    int suffMax[n+1]; //suffmax on x[i] for all i
    for(int i=0;i<=n;i++) suffMax[i]=-1e15;
    for(int i=n;i>0;i--) suffMax[i]=max(suffMax[min(n,i+1)],x[i-1]);
    //for(int i=1;i<=n;i++) cout<<suffMax[i]<<' ';
    //cout<<endl;
    int ans=0;
    for(int i=0;i<n;i++){
        ans=max(ans,a[i].ss);
        int tem=a[i].ff-preSum[i];
        tem+=suffMax[i+1];
        ans=max(ans,tem);
        //cout<<tem<<' ';
    }
    cout<<ans<<endl;
    return;
}

int32_t main(){
    fios();
    //file();

    int t=1;
    //cin>>t;
    for(int tc=1;tc<=t;tc++){
        //cout<<"Case "<<tc<<": ";
        solve();
    }
    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...