Cod sursa(job #2628055)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 14 iunie 2020 11:34:14
Problema Avioane Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

void dinamica ( int l, int r, int splitl, int splitr );

int n;

int v[100137];

int sorin;

int main()
{
    in >> n ;
    for ( register int i = 1 ; i <= n ; ++i )
        in >> v[i];
    sort ( v + 1, v + n + 1);
    dinamica ( 1, n, 1, n );
    out << sorin;
    return 0;
}

void dinamica ( int l, int r, int splitl, int splitr )
{
    if ( l > r )
        return ;
    int mid = ( l + r ) / 2;
    int op;
    int mx = -1;
    for ( register int i = splitl ; i < min ( mid, splitr + 1 ) ; ++i )
        if ( ( mid - i ) * v[i] > mx )
        {
            mx = ( mid - i ) * v[i];
            op = i;
        }
    mx += ( n - mid + 1 ) * v[mid];
    sorin = max ( sorin, mx );
    dinamica ( mid + 1, r, op, splitr );
    dinamica ( l, mid - 1, splitl, op );
}