Pagini recente » Cod sursa (job #3259736) | Cod sursa (job #3294152) | Cod sursa (job #3290773) | Cod sursa (job #1802721) | Cod sursa (job #2628055)
#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];
int 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;
int mx = -1;
for ( register int i = splitl ; i < min ( mid, splitr + 1 ) ; ++i )
if ( ( mid - i ) * v[i] > mx )
{
mx = ( mid - i ) * v[i];
op = i;
}
mx += ( n - mid + 1 ) * v[mid];
sorin = max ( sorin, mx );
dinamica ( mid + 1, r, op, splitr );
dinamica ( l, mid - 1, splitl, op );
}