Cod sursa(job #1170612)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 13 aprilie 2014 21:27:38
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <algorithm>


using namespace std;

const int MAX_N = 1e5 + 10;
int a[MAX_N], N, ind[MAX_N];
long long cost[MAX_N];

inline long long max(long long x, long long y){

    if(x > y)
        return x;
    return y;
}

void pre(int l, int r){

    if(l > r)
        return;
    int mid = (l + r) / 2;
    for(int i = ind[l - 1]; i <= mid && i <= ind[r + 1]; ++i)
        if(1LL * a[i] * (mid - i + 1) > cost[mid]){

            cost[mid] = 1LL * a[i] * (mid - i + 1);
            ind[mid] = i;
        }
    pre(l, mid - 1);
    pre(mid + 1, r);
}

int main()
{
    ifstream cin("avioane.in");

    cin >> N;
    for(int i = 1; i <= N; ++i)
        cin >> a[i];
    cin.close();
    sort(a + 1, a + N + 1);

    ind[N + 1] = N;
    pre(1, N);
    long long sol = 0;
    for(int i = 1; i <= N; ++i)
        sol = max(sol, 1LL * a[i] * (N - i + 1) + cost[i - 1]);

    ofstream cout("avioane.out");

    cout << sol;
    cout.close();
    return 0;
}