Cod sursa(job #586684)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 2 mai 2011 18:57:39
Problema Avioane Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;

#define NM 100005
#define LL long long

int V[NM], N;

int main()
{
    freopen ("avioane.in", "r", stdin);
    freopen ("avioane.out", "w", stdout);

    scanf ("%d", &N);

    for (int i = 1; i <= N; ++i) scanf ("%d", &V[i]);

    sort (V + 1, V + N + 1);

    LL best = 0;

    for (int i = 1; i < N; ++i)
    {
        int st = i+1, dr = N;

        while (dr - st > 20)
        {
            int stmij = (2*st + dr)/3;
            int drmij = (st + 2*dr)/3;

            if ((LL)V[i]*(stmij-i)+(LL)V[stmij]*(N-stmij+1) > (LL)V[i]*(drmij-i)+(LL)V[drmij]*(N-drmij+1)) dr = drmij;
            else st = stmij;
        }

        for (int j = st; j <= dr; ++j)
            best = max (best, (LL)V[j]*(N-j+1) + (LL)V[i]*(j-i));
    }

    printf ("%lld", best);

    return 0;
}