Cod sursa(job #1747230)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 24 august 2016 17:13:36
Problema Avioane Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
# include <iostream>
# include <fstream>

# include <algorithm>

using namespace std;

# define MAX_N 100000

int v[MAX_N];
int best[MAX_N];

int n;

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

    int 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" );

    int 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;
}