Pagini recente » Cod sursa (job #2512397) | lets_go_oni | Cod sursa (job #1759462) | Cod sursa (job #2873169) | Cod sursa (job #2628057)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("avioane.in");
ofstream out ("avioane.out");
void dinamica ( int l, int r, int splitl, int splitr );
int n;
int v[100137];
long long sorin;
int main()
{
in >> n ;
for ( register int i = 1 ; i <= n ; ++i )
in >> v[i];
sort ( v + 1, v + n + 1);
dinamica ( 1, n, 1, n );
out << sorin;
return 0;
}
void dinamica ( int l, int r, int splitl, int splitr )
{
if ( l > r )
return ;
int mid = ( l + r ) / 2;
int op;
long long mx = -1;
for ( register int i = splitl ; i < min ( mid, splitr + 1 ) ; ++i )
if ( 1ll * ( mid - i ) * v[i] > mx )
{
mx = 1ll * ( mid - i ) * v[i];
op = i;
}
mx += 1ll * ( n - mid + 1 ) * v[mid];
sorin = max ( sorin, mx );
dinamica ( mid + 1, r, op, splitr );
dinamica ( l, mid - 1, splitl, op );
}