Cod sursa(job #585735)

Utilizator darrenRares Buhai darren Data 30 aprilie 2011 11:32:00
Problema Avioane Scor 0
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 5-9 Marime 0.9 kb
#include <fstream>
#include <algorithm>
#include <deque>

using namespace std;

int N;
long long P[100002];
long long maxnow[100002];
deque<long long> D;
long long result;

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

    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> P[i];
    sort(P + 1, P + N + 1);

    int logN;
    for (logN = 1; (logN << 1) <= N; logN <<= 1);

    for (long long i = N; i >= 1; --i) // pt business
    {
        int step = logN;

        long long apnow;
        for (apnow = 0; step; step >>= 1)
            if (apnow + step < i && P[apnow + step] * (i - (apnow + step)) > P[apnow + step - 1] * (i - (apnow + step - 1)))
                apnow += step;

        result = max(result, P[i] * (long long) (N - i + 1) + P[apnow] * (i - apnow));
    }

    fout << result;

    fin.close();
    fout.close();
}