Pagini recente » Cod sursa (job #695733) | Cod sursa (job #908198) | Cod sursa (job #1700799) | Cod sursa (job #338805) | Cod sursa (job #1235368)
#include <fstream>
#include <algorithm>
const char IN [ ] = "avioane.in" ;
const char OUT [ ] = "avioane.out" ;
const int MAX = 100014 ;
const long long INF = 1LL << 61 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
long long v [ MAX ] , dp [ MAX ] ;
int poz [ MAX ] , n ;
inline void chmax ( long long &a , long long b )
{
if ( b > a )
a = b ;
}
void impart ( int st , int dr )
{
if ( st > dr )
return ;
int mij = ( st + dr ) >> 1 ;
dp [ mij ] = -INF ;
for ( int i = poz [ st - 1 ] ; i <= poz [ dr + 1 ] ; ++ i )
{
long long sum = 1LL * ( mij - i ) * v [ i ] + 1LL * ( n - mij + 1 ) * v [ mij ] ;
if ( sum > dp [ mij ] )
{
dp [ mij ] = sum ;
poz [ mij ] = i ;
}
}
impart ( st , mij - 1 ) ;
impart ( mij + 1 , dr ) ;
}
int main( )
{
fin >> n ;
for ( int i = 1 ; i <= n ; ++ i )
fin >> v [ i ] ;
poz [ 0 ] = 1 ;
poz [ n + 1 ] = n ;
sort ( v + 1 , v + n + 1 ) ;
impart ( 1 , n ) ;
long long sol = - INF ;
for ( int i = 1 ; i <= n ; ++ i )
chmax ( sol , dp [ i ] ) ;
fout << sol ;
return 0;
}