Pagini recente » Cod sursa (job #1233201) | Cod sursa (job #1348800) | Cod sursa (job #510231) | Cod sursa (job #705613) | Cod sursa (job #1779145)
#include <cstdio>
#include <algorithm>
typedef long long LL;
using namespace std;
const int NMAX = 100000;
const LL inf = 2000000000000000000LL;
int n;
int a[NMAX+5], p[NMAX+5];
LL ans, best[NMAX+5];
void Solve(int st, int dr)
{
int mid = (st+dr)/2;
best[mid] = -inf;
for(int i=p[st-1]; i<=p[dr+1]; i++)
{
if(best[mid]>=1LL*(mid-i+1)*a[i] || i>mid) continue;
best[mid]=1LL*(mid-i+1)*a[i]; p[mid]=i;
}
if(st<mid) Solve(st, mid-1);
if(dr>mid) Solve(mid+1, dr);
}
int main()
{
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
scanf("%d", &n);
p[n+1]=n;
for(int i=1; i<=n; i++)
scanf("%d", &a[i]);
sort(a+1, a+n+1);
Solve(1, n);
for(int i=0; i<=n; i++)
ans=max(ans, best[i] + 1LL*(n-i)*a[i+1]);
printf("%lld\n", ans);
return 0;
}