Pagini recente » Cod sursa (job #121307) | Cod sursa (job #1519747) | Cod sursa (job #165054) | Cod sursa (job #3137367) | Cod sursa (job #1229242)
#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;
}