Cod sursa(job #1714344)

Utilizator enacheionutEnache Ionut enacheionut Data 7 iunie 2016 22:50:23
Problema Avioane Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#include<algorithm>
using namespace std;

long long a[100005],s[100005],i,x,n,mx,sol;

void calc(int x,int y)
{
    if (y-x<2)
        return;
    long long i,m,p,mx=0;
    m=(x+y)/2;
    for (i=s[x];i<=s[y];i++)
        if ((n-i+1)*(a[i]-a[m])>mx)
        {
            mx=(n-i+1)*(a[i]-a[m]);
            p=i;
        }
    s[m]=p;
    if (mx+a[m]*(n-m+1)>sol)
        sol=mx+a[m]*(n-m+1);
    calc(x,m);
    calc(m,y);
}


int main()
{
    ifstream f("avioane.in");
    ofstream g("avioane.out");
    f >> n;
    for (i=1;i<=n;i++)
        f >> a[i];
    sort(a+1,a+n+1);
    for (i=1;i<=n;i++)
        if ((n-i+1)*(a[i]-a[1])>mx)
        {
            mx=(n-i+1)*(a[i]-a[1]);
            x=i;
        }
    sol=mx+a[1]*n;
    s[1]=x;
    s[n]=n;
    calc(1,n);
    g << sol;
}