Pagini recente » Cod sursa (job #2347365) | Cod sursa (job #3004926) | Cod sursa (job #2129450) | Cod sursa (job #344725) | Cod sursa (job #3179810)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
/**
i<j
a[j]*(n-j+1) + a[i]*(j-i)
a[j]*n-a[j]*j+a[j] + a[i]*j-a[i]*i
*/
int n;
int a[100005];
struct F
{
long long u,v;
int l,r;
long long eval(int x)
{
return u*x+v;
}
};
/**
u1*x+v1 = u2*x+v2
x*(u1-u2) = v2-v1
x=(v2-v1)/(u1-u2)
*/
int Intersection(F f1,F f2)
{
return (f2.v-f1.v)/(f1.u-f2.u);
}
int i1=1,i2;
F h[100005];
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
fin>>a[i];
sort(a+1,a+n+1);
long long ans=0;
for(int i=1; i<=n; i++)
{
if(i==1 || a[i]>a[i-1])
{
F f;
f.u=a[i];
f.v=-1LL*a[i]*i;
f.l=f.r=0;
while(i2>=i1 && h[i2].l>=Intersection(f,h[i2]))
i2--;
if(i2>=i1)
{
h[i2].r=Intersection(f,h[i2]);
f.l=h[i2].r;
f.r=n;
h[++i2]=f;
}
else
{
f.l=1;
f.r=n;
h[++i2]=f;
}
}
while(i1<=i2 && h[i1].r<i)
i1++;
if(i>=2)
ans=max(ans,1LL*a[i]*n-1LL*a[i]*i+a[i]+h[i1].eval(i));
}
fout<<ans<<"\n";
return 0;
}