Cod sursa(job #2453957)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 6 septembrie 2019 18:06:24
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

constexpr int NMAX = 1e5 + 5;

int n;

long long sol;

int a[NMAX];

int caut (int st, int dr, int poz)
{
    long long sum = -1;
    int nr=0;

    for (int i=st; i<=dr && i<=poz; ++i)
        if (sum < 1LL*(poz-i)*a[i])
        {
            sum = 1LL * (poz-i) * a[i];
            nr = i;
        }

    return nr;
}

void solve (int st, int dr, int dst, int ddr)
{
    if (st > dr) return;

    int mij = (st + dr) / 2;
    int aux = caut(dst, ddr, mij);

    sol = max(sol, 1LL*(mij - aux)*a[aux] + 1LL * (n - mij + 1) * a[mij]);

    solve(st, mij-1, dst, aux);
    solve(mij+1, dr, aux, ddr);
}

int main()
{
    f >> n;

    for (int i=1; i<=n; ++i)
        f >> a[i];

    sort(a + 1, a + n + 1);
    sol = -1;
    solve(1, n, 1, n);

    g << sol << '\n';
    return 0;
}