Cod sursa(job #768620)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 17 iulie 2012 15:04:57
Problema Avioane Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <algorithm>
#define N 100000
#define LL long long

using namespace std;

ifstream f("avioane.in");
ofstream g("avioane.out");

int n,i,A[N],j,S[N];
LL B[N],ANS,c;

void Precalc (int p, int u)
{
    if (p>u) return;
    int m=(p+u)/2;
    for (i=S[p-1];i<=S[u+1] && i<=m;i++)
        if (B[m]<(c=(m-i+1)*1LL*A[i]))
        {
            B[m]=c;
            S[m]=i;
        }
    Precalc(p,m-1);
    Precalc(m+1,u);
}


int main ()
{
    f >> n;
    for (i=1;i<=n;i++)
        f >> A[i];
    sort(A+1,A+n+1);
    S[n+1]=n;
    Precalc(1,n);
    for (i=1;i<=n;i++)
        ANS=max(ANS,B[i-1]+A[i]*1LL*(n-i+1));
    g << ANS << '\n';
    f.close();g.close();
    return 0;
}