Pagini recente » Cod sursa (job #2156449) | Cod sursa (job #213871) | Cod sursa (job #3128366) | Cod sursa (job #1523147) | Cod sursa (job #1791124)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 100009;
int a[nmax] , opt[nmax];
int i , n;
long long answer;
long long w(int i , int j)
{
return 1LL * a[i] * i + 1LL * a[j] * (j - i);
}
void solve(int l , int r , int lw , int hg)
{
int mid = (l + r) / 2;
opt[mid] = lw;
for (int i = lw ; i <= hg ; ++i)
if (w(i , mid) >= w(opt[mid] , mid)) opt[mid] = i;
if (l <= mid - 1) solve(l , mid - 1 , lw , opt[mid]);
if (mid + 1 <= r) solve(mid + 1 , r , opt[mid] , hg);
}
int main()
{
freopen("avioane.in" , "r" , stdin);
freopen("avioane.out" , "w" , stdout);
scanf("%d" , &n);
for (i = 1 ; i <= n ; ++i)
scanf("%d" , &a[i]);
sort(a + 1 , a + n + 1 , [&](int x , int y){return x > y;});
solve(1 , n , 1 , n);
for (i = 1 ; i <= n ; ++i)
answer = max(answer , w(opt[i] , i));
printf("%lld\n" , answer);
return 0;
}