Cod sursa(job #2410103)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 19 aprilie 2019 18:42:35
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <algorithm>
#define DIM 100010
using namespace std;

ifstream fin ("avioane.in");
ofstream fout ("avioane.out");
long long d[DIM],sol;
int poz[DIM],v[DIM];
int n,i;
void solve (int st, int dr){
    if (st > dr)
        return;
    int mid = (st+dr)/2;
    /// calculam d[mid];
    /// optimul pt mid nu se poate afla in alt interval decat poz[st-1]...min(poz[dr+1],mid)
    /// fixez clasa bussiness si caut economy
    for (int i=poz[st-1];i<=poz[dr+1] && i<=mid;i++){
        if (1LL*(mid-i)*v[i] + 1LL*(n-mid+1)*v[mid] > d[mid]){
            d[mid] = 1LL*(mid-i)*v[i] + 1LL*(n-mid+1)*v[mid];
            poz[mid] = i;
        }
    }

    solve (st,mid-1);
    solve (mid+1,dr);
}
int main (){

    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];
    sort (v+1,v+n+1);
    poz[0] = 1, poz[n+1] = n;
    solve (1,n);

    sol = 0;
    for (i=1;i<=n;i++)
        sol = max (sol,d[i]);
    fout<<sol;

    return 0;
}