Pagini recente » pre-oji | Cod sursa (job #1725042) | Cod sursa (job #2316430) | Cod sursa (job #3134238) | Cod sursa (job #587257)
Cod sursa(job #587257)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define INF 2000000005
#define ll long long
#define NMAX 100006
#define maxim(a,b) (a>b ? a : b)
ll n,d[NMAX],inc,sf;
ll v[NMAX],st[NMAX];
ll sol,tfirst[NMAX];
ll bate(ll a,ll b)
{
if(v[a]==v[b])
return INF;
ll avans=(b-a)*v[a];
ll recp=v[b]-v[a];
return avans/recp+b;
}
int main ()
{
ll i,twin;
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%lld",&n);
for(i=1;i<=n;i++)
scanf("%lld",&v[i]);
sort(v+1,v+n+1);
st[1]=1;sf=1;inc=1;
d[1]=v[1];
for(i=2;i<=n;i++)
{
tfirst[st[inc]]=i;
while(sf)
{
twin=bate(st[sf],i);
if(twin<=tfirst[st[sf]])
sf--;
else
break;
}
st[++sf]=i;
tfirst[i]=twin;
d[i]=v[st[inc]]*(i-st[inc]+1);
}
for(i=n;i>=1;i--)
sol=maxim(sol,v[i]*(n-i+1)+d[i-1]);
printf("%lld\n",sol);
return 0;
}