Cod sursa(job #1515580)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 1 noiembrie 2015 20:57:53
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#include<algorithm>

using namespace std;

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

const int nmax = 1e5;
const long long inf = (1LL << 62);
long long v[ nmax + 1 ];
int d[ nmax + 1 ];
long long ans;

void query( int p, int x, int y ) {
    ans = -inf;
    for( int i = x; i <= y; ++ i ) {
        if ( ans < (p - i) * v[ i ] ) {
            d[ p ] = i;
            ans = (p - i) * v[ i ];
        }
    }
}
void solve( int x, int y ) {
    if ( x == y - 1 ) {
        return ;
    }
    query( (x + y) / 2, d[ x ], d[ y ] );
    solve( x, (x + y) / 2 );
    solve( (x + y) / 2, y );
}
int main() {
    int n;
    fin >> n;
    d[ 1 ] = 1;
    for( int i = 1; i <= n; ++ i ) {
        fin >> v[ i ];
    }
    sort( v + 1, v + n + 1 );
    query( n, 1, n );
    solve( 1, n );
    ans = -inf;
    for( int i = 1; i <= n; ++ i ) {
        if ( ans < v[ i ] * (n - i + 1) + v[ d[ i ] ] * (i - d[ i ]) ) {
            ans = v[ i ] * (n - i + 1) + v[ d[ i ] ] * (i - d[ i ]);
        }
    }
    fout << ans << "\n";
    fin.close();
    fout.close();
    return 0;
}