Cod sursa(job #1724212)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 2 iulie 2016 15:40:06
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <algorithm>

using namespace std;

constexpr int MAX_N = 100000;

int v[MAX_N];
int n;

long long divide(int b, int e, int lo, int hi) {
    if (b > e) {
        return 0;
    } else {
        int m = (b + e) >> 1;
        long long best = 0LL; int bestIndex = -1;
        for (int i = (hi > m) ? m : hi; i >= lo; i -= 1) {
            const long long cost = (long long) v[m] * (n - m) + (long long) v[i] * (m - i);
            if (cost > best) {
                best = cost;
                bestIndex = i;
            }
        }
        return max({best,
                   divide(b, m - 1, lo, bestIndex),
                   divide(m + 1, e, bestIndex, hi)});
    }
}

int main() {
    ifstream fin("avioane.in");
    ofstream fout("avioane.out");
    fin.tie(0);
    ios_base::sync_with_stdio(false);

    fin >> n;
    for (int i = 0; i < n; i += 1) {
        fin >> v[i];
    }

    sort(v, v + n);

    fout << divide(0, n - 1, 0, n - 1) << '\n';
    fout.close();
    return 0;
}