Cod sursa(job #1806479)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 15 noiembrie 2016 13:29:53
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

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

int n;
int v[100100];
int d[100100];
int i,j;

void solve(int l,int r)
{
    if(l>r)
        return ;
    int m = (l+r)>>1;
    long long best = 0;
    int lim = min(m,d[r+1]);
    for(int i=d[l-1]; i<=lim; ++i)
    {
        long long curr = 1LL*v[i]*(m-i);
        if(curr>best)
        {
            best=curr;
            d[m]=i;
        }
    }
    solve(l,m-1);
    solve(m+1,r);
}

int main()
{
    fin>>n;
    for(i=1; i<=n; ++i)
        fin>>v[i];
    sort(v+1,v+n+1);
    d[n+1]=n;
    solve(1,n);
    long long ans = 0;
    for(i=1; i<=n; ++i)
        ans=max(ans,1LL*v[i]*(n-i+1)+1LL*v[d[i]]*(i-d[i]));
    fout<<ans;
}