Pagini recente » Cod sursa (job #1973316) | Cod sursa (job #2333555) | Cod sursa (job #538758) | Cod sursa (job #2436292) | Cod sursa (job #1193893)
#include <cstdio>
#include <algorithm>
#define ll long long
using namespace std;
const int MAX_N=100100;
ll v[MAX_N];
int d[MAX_N],st,dr;
ll cost(int i,int j)
{
if(v[i]==v[j])
{
return MAX_N;
}
return (v[j]*j-v[i]*i)/(v[j]-v[i]) + 1;
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%ld",&v[i]);
sort(v+1,v+n+1);
ll ans=v[1]*n;
d[++dr]=1;
st=1;
for(int t=2;t<=n;t++)
{
while(st<dr && cost(d[st],d[st+1])<=t)
st++;
ans=max(ans,(n-t+1)*v[t]+(t-d[st])*v[d[st]]);
if(v[t]==v[d[dr]])
continue;
while(st<dr && cost(d[dr-1],t)>cost(d[dr],t) )
{
dr--;
}
d[++dr]=t;
}
printf("%ld",ans);
return 0;
}