Cod sursa(job #1747241)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 24 august 2016 17:20:34
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
# include <iostream>
# include <fstream>

# include <algorithm>

using namespace std;

# define MAX_N 100000

long long v[MAX_N];
long long best[MAX_N];

long long n;

void solve( long long i1, long long j1, long long i2, long long j2 ) {
    if ( j1 < i1 )
        return;

    long long m, b, i;

    m = ( i1 + j1 ) / 2;
    b = 0;
    for ( i = i2; i <= j2; i ++ ) {
        if ( v[i] * ( n - i ) + v[m] * ( i - m ) > v[b] * ( n - b ) + v[m] * ( b - m ) )
            b = i;
    }
    best[m] = b;

    solve( i1, m - 1, i2, b );
    solve( m + 1, j1, b, j2 );
}

int main() {
    ifstream fin( "avioane.in" );
    ofstream fout( "avioane.out" );

    long long i, m;

    fin >> n;

    for ( i = 0; i < n; i ++ )
        fin >> v[i];

    sort( v, v + n );

    solve( 0, n - 1, 0, n - 1 );

    m = 0;
    for ( i = 0; i < n; i ++ )
        m = max( m, v[i] * ( best[i] - i) + v[best[i]] * ( n - best[i] ) );

    fout << m;

    fin.close();
    fout.close();

    return 0;
}