Cod sursa(job #1229242)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 16 septembrie 2014 19:57:58
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
long long N,Array[100005],Result,Aux[100005];
void Read()
{
    f>>N;
    for(long long i=1;i<=N;i++)
        f>>Array[i];
    sort(Array+1,Array+N+1);
}
void divide(long long left,long long right)
{
    long long i;
    if(right-left<2)
        return;
    long long mid=(left+right)/2,aux=0,Max=0;
    for(i=Aux[left];i<=Aux[right];i++)
    {
        if(Max<(N-i+1)*(Array[i]-Array[mid]))
        {
            Max=(N-i+1)*(Array[i]-Array[mid]);
            aux=i;
        }
    }
    Aux[mid]=aux;
    Result=max(Result,Max+Array[mid]*(N-mid+1));
    divide(left,mid);
    divide(mid,right);
}
int main()
{
    Read();
    long long aux,Max=0;
    for(long long i=1;i<=N;i++)
    {
        if(Max<(N-i+1)*(Array[i]-Array[1]))
        {
            Max=(N-i+1)*(Array[i]-Array[1]);
            aux=i;
        }
    }
    Aux[1]=aux;
    Aux[N]=N;
    Result=Max+Array[1]*N;
    divide(1,N);
    g<<Result<<"\n";
    return 0;
}