Submission #983900

#TimeUsernameProblemLanguageResultExecution timeMemory
983900LucaIlieHacker (BOI15_hac)C++17
100 / 100
275 ms18520 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 5e5;
int n, v[MAX_N + 1], sp[MAX_N + 1];

int sum( int l, int r ) {
    if ( l > n )
        l -= n;
    if ( r > n )
        r -= n;

    if ( l > r )
        return sp[n] - sp[l  - 1] + sp[r];
    return sp[r] - sp[l - 1];
}

int main() {
    cin >> n;
    for ( int i = 1; i <= n; i++ ) {
        cin >> v[i];
        sp[i] = sp[i - 1] + v[i];
    }

    int maxx = 0;
    multiset<int> minn;
    for ( int l = 0; l < (n + 1) / 2; l++ )
        minn.insert( sum( 1 + l, 1 + l + (n + 1) / 2 - 1 ) );
    for ( int i = 1; i <= n; i++ ) {
        maxx = max( maxx, *minn.begin() );
        int sin = sum( i + (n + 1) / 2, i + (n + 1) / 2 + (n + 1) / 2 - 1 );
        int sout = sum( i, i + (n + 1) / 2 - 1 );
        minn.insert( sin );
        minn.erase( minn.lower_bound( sout ) );
    }

    cout << maxx;

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