Pagini recente » Borderou de evaluare (job #2352495) | Cod sursa (job #2412132)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
const int DIM = 1e5 + 5;
int N, arr[DIM];
long long ans = numeric_limits<long long>::min();
void solve( int st, int dr, int L, int R ){
if( st > dr )
return;
int p = -1;
long long mx = numeric_limits<long long>::min();
int mid = ( st + dr ) >> 1;
for( int i = L; i <= mid && i <= R; i++ )
if( mx < 1LL * (mid - i) * arr[i] + 1LL * (N - mid + 1) * arr[mid] )
mx = 1LL * (mid - i) * arr[i] + 1LL * (N - mid + 1) * arr[mid], p = i;
ans = max( ans, mx );
solve( st, mid - 1, L, p );
solve( mid + 1, dr, p, R );
}
int main(){
fin >> N;
for( int i = 1; i <= N; i++ )
fin >> arr[i];
sort( arr + 1, arr + N + 1 );
solve( 1, N, 1, N );
fout << ans << "\n";
return 0;
}