Pagini recente » Cod sursa (job #60839) | Cod sursa (job #7041) | Cod sursa (job #487010) | Cod sursa (job #1454956) | Cod sursa (job #1791121)
#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("test.in" , "r" , stdin);
freopen("test.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;
}