Pagini recente » Cod sursa (job #1863769) | Cod sursa (job #487567) | Cod sursa (job #1554502) | Cod sursa (job #333324) | Cod sursa (job #1232731)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define NMAX 100002
#define INF 4611686018427387904ll
int n, v[NMAX], poz[NMAX];
long long din[NMAX];
void divide(int st, int dr)
{
if(st>dr)
return;
int i=(dr+st)>>1;
din[i]=-INF;
for(int j=poz[st-1]; j<=poz[dr+1]; ++j)
{
long long sum=(long long)(i-j)*v[j] + (long long)(n-i+1)*v[i];
if(sum>din[i])
{
din[i]=sum;
poz[i]=j;
}
}
divide(st, i-1);
divide(i+1, dr);
}
int main()
{
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
long long maxi=0;
scanf("%d", &n);
for(int i=1; i<=n; ++i)
scanf("%d", &v[i]);
sort(v+1, v+1+n);
poz[0]=1;
poz[n+1]=n;
divide(1, n);
for(int i=1; i<=n; ++i)
{
if(din[i]>maxi)
maxi=din[i];
}
printf("%lld\n", maxi);
return 0;
}