Cod sursa(job #1832412)

Utilizator ade_tomiEnache Adelina ade_tomi Data 19 decembrie 2016 23:17:50
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 100004;
int v[NMAX], n;
long long sol;

void solve (int l1, int l2, int lim1, int lim2)
{
    if (l1 > l2)
        return;
    int mid = (l1 + l2) / 2;
    int maxi = lim1;
    long long sol_maxi = (n - mid + 1) * v[mid] + (mid - lim1) * v[lim1];
    for (int i = lim1 ; i <= min(lim2, mid); i ++)
    {
        if ( 1LL * (n - mid + 1) * v[mid] + 1LL * (mid - i) * v[i] > sol_maxi)
        {
            sol_maxi = 1LL * (n - mid + 1) * v[mid] + 1LL * (mid - i) * v[i] ;
            maxi = i;
        }

    }
    sol = max(sol, sol_maxi);
    solve (l1, mid - 1, lim1, maxi);
    solve (mid + 1, l2, maxi, lim2);
}
int main ()
{
    ifstream cin ("avioane.in");
    ofstream cout ("avioane.out");
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];
    sort (v + 1, v + 1 + n);
    solve (1, n, 1, n);
    cout << sol;
    return 0;
}