Pagini recente » Cod sursa (job #3231748) | Borderou de evaluare (job #1208722) | Borderou de evaluare (job #996776) | Borderou de evaluare (job #1461856) | Cod sursa (job #1832412)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 100004;
int v[NMAX], n;
long long sol;
void solve (int l1, int l2, int lim1, int lim2)
{
if (l1 > l2)
return;
int mid = (l1 + l2) / 2;
int maxi = lim1;
long long sol_maxi = (n - mid + 1) * v[mid] + (mid - lim1) * v[lim1];
for (int i = lim1 ; i <= min(lim2, mid); i ++)
{
if ( 1LL * (n - mid + 1) * v[mid] + 1LL * (mid - i) * v[i] > sol_maxi)
{
sol_maxi = 1LL * (n - mid + 1) * v[mid] + 1LL * (mid - i) * v[i] ;
maxi = i;
}
}
sol = max(sol, sol_maxi);
solve (l1, mid - 1, lim1, maxi);
solve (mid + 1, l2, maxi, lim2);
}
int main ()
{
ifstream cin ("avioane.in");
ofstream cout ("avioane.out");
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
sort (v + 1, v + 1 + n);
solve (1, n, 1, n);
cout << sol;
return 0;
}