Pagini recente » Cod sursa (job #605684) | Cod sursa (job #2947369) | Cod sursa (job #2511939) | Cod sursa (job #3295374) | Cod sursa (job #1266387)
#include<cstdio>
#include<algorithm>
#define NMAX 100001
using namespace std;
int n,i;
int v[NMAX],ind[NMAX];
long long cost[NMAX];
long long max(long long a,long long b)
{
if (a>b) return a;
else return b;
}
void divide(int st,int dr)
{
if (st>dr) return;
int mij=(st+dr)/2;
for (int i=ind[st-1];i<=ind[dr+1] && i<=mij;++i)
{
if (1ll*v[i]*(mij-i+1)>cost[mij])
{
cost[mij]=1ll*v[i]*(mij-i+1);
ind[mij]=i;
}
}
divide(1,mij-1);
divide(mij+1,dr);
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i) scanf("%d",&v[i]);
sort(v+1,v+n+1);
ind[n+1]=n;
divide(1,n);
long long pmax=0;
for (i=1;i<=n;++i)
pmax=max(pmax,1ll*v[i]*(n-i+1)+cost[i-1]);
printf("%lld\n",pmax);
return 0;
}