Cod sursa(job #993107)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 3 septembrie 2013 12:05:37
Problema Avioane Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define N 100014
using namespace std;
int n,a[N],c[N];
long long b[N],sol;
void calc (int p, int u)
{
    if (p>u) return;
    int m=(p+u)/2,i;
    long long crt;
     for (i=c[p-1];i<=m;i++)
    {
        crt=(long long)(m-i+1)*a[i];
        if (b[m]<crt){
            b[m]=crt;
            c[m]=i;
        }
    }
    calc(p,m-1);
    calc(m+1,u);
}
int main ()
{
    int i,j;
    fstream f,g;
    f.open("avioane.in",ios::in);
    g.open("avioane.out",ios::out);
    f>>n;
    for (i=1;i<=n;i++)
       f>>a[i];
    sort(a+1,a+1+n);
    c[n+1]=n;
    calc(1,n);
    for (i=2;i<=n;i++)
        sol=max(sol,b[i-1]+(long long)a[i]*(n-i+1));
    g<<sol;
}