제출 #542780

#제출 시각아이디문제언어결과실행 시간메모리
542780QuantumK9Art Exhibition (JOI18_art)C++17
100 / 100
217 ms28620 KiB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple 

using namespace std;

void solve(){

    int n; cin >> n;

    pair<ll,ll> painting[n];

    for( int i = 0; i < n; i++ ){
        ll s, v; cin >> s >> v;
        painting[i] = mp( s, v );
    }

    sort( painting, painting+n );

    ll prefixSumsValues[n];
    memset( prefixSumsValues, 0, sizeof prefixSumsValues );

    for( int i = 0; i < n; i++ ){
        if ( i > 0 ){ prefixSumsValues[i] += prefixSumsValues[i-1]; }
        prefixSumsValues[i] += painting[i].second;
    }

    // cout << "Prefix Sums of Values: ";
    // for( ll i : prefixSumsValues ){ cout << i << " "; }
    // cout << endl;

    ll bestChoiceOfK[n];
    memset( bestChoiceOfK, 0, sizeof bestChoiceOfK );

    for( int i = n-1; i >= 0; i-- ){
        bestChoiceOfK[i] = prefixSumsValues[i] - painting[i].first; // sum of 0..i (S) - Amax
        if( i < n-1 ){ bestChoiceOfK[i] =  max( bestChoiceOfK[i], bestChoiceOfK[i+1] ); } // check if greater is better
    }

    ll maxx = 0;

    for( int start_index = 0; start_index < n; start_index++ ){
        ll value = bestChoiceOfK[ start_index ] + painting[ start_index ].first; // add start index
        if ( start_index > 0 ){ value -= prefixSumsValues[ start_index-1]; } // cut back on unnecessary values
        maxx = max( maxx, value );
    }

    cout << maxx << endl;


    return;
}


int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int t = 1;
    //cin >> t;
    while (t--) { 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...