Pagini recente » Cod sursa (job #850808) | Cod sursa (job #185669) | Cod sursa (job #2147311) | Cod sursa (job #3261181) | Cod sursa (job #1228483)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<cmath>
using namespace std ;
#define maxn 100005
#define inf 100000000000000000000
int N, v[maxn] ;
long long d[maxn] ;
long long sol = -inf ;
int poz[maxn] ;
void solve(int st,int dr)
{
if( st > dr )
return ;
int mij = ( st + dr ) / 2 ;
d[mij] = -inf ;
int lim = min( mij, poz[dr + 1] ) ;
for(int i = poz[st - 1]; i <= lim; ++i)
{
if( (long long)( N - mij + 1 ) * v[mij] + (long long)( mij - i ) * v[i] > d[mij] )
{
d[mij] = (long long)( N - mij + 1 ) * v[mij] + (long long)( mij - i ) * v[i] ;
poz[mij] = i ;
}
}
solve( st, mij - 1 ) ;
solve( mij + 1, dr ) ;
}
int main()
{
std::ios_base::sync_with_stdio(false) ;
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
cin >> N ;
for(int i = 1; i <= N; ++i)
cin >> v[i] ;
sort( v + 1, v + N + 1 ) ;
poz[0] = 1 ;
poz[N + 1] = N ;
solve( 1, N ) ;
for(int i = 1; i <= N; ++i)
if( d[i] > sol )
sol = d[i] ;
cout << sol ;
return 0 ;
}