Pagini recente » Cod sursa (job #960514) | Cod sursa (job #676972) | Cod sursa (job #2169253) | Cod sursa (job #2984531) | Cod sursa (job #1170246)
#include<fstream>
#include<algorithm>
#define dim 100008
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
int N;
long long SOL[dim],l[dim];
long long A[dim];
inline long long maxim( long long a ,long long b)
{
if( a<b )
return b;
return a;
}
void solve(int st,int dr)
{
int mid=(st+dr)/2;
SOL[mid]=-1;
for( int i=l[st-1] ; i<=l[dr+1]; ++i)
{
if( i>=mid )
break;
long long X=A[i]*(mid-i+1);
if(X>SOL[mid])
{
SOL[mid]=X;
l[mid]=i;
}
}
if(mid-1>=st)
solve(st,mid-1);
if(mid+1<=dr)
solve(mid+1,dr);
}
int main ()
{
f >> N ;
long long MAX=0;
for( int i=1; i <= N; ++i)
{
f >> A[i] ;
}
sort( A+1, A+1+N);
l[N+1]=N;
solve(1,N);
for( int i=2; i<=N ; ++i )
{
MAX=maxim( MAX, A[i]*(N-i+1)+ SOL[i-1]);
}
g<<MAX<<"\n";
return 0;
}