Pagini recente » Cod sursa (job #1092803) | Cod sursa (job #492525) | Cod sursa (job #1661424) | Cod sursa (job #2097649) | Cod sursa (job #587726)
Cod sursa(job #587726)
#include <cstdio>
#include <algorithm>
using namespace std;
#define nmax 100010
#define ll long long
#define inf 1000000
int n, v[nmax], q[nmax], r[nmax];
ll a[nmax], sol;
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d", &n);
int i, d, st, dr;
ll x;
for (i=1; i<=n; i++) scanf("%d", &v[i]);
sort (v+1, v+n+1);
for (i=1; i<=n; i++) a[i]=(ll) v[i]*(n-i+1);
st=1;
dr=0;
for (i=1; i<=n; i++)
{
while (st<dr && r[st]<=i) st++;
while (st<=dr)
{
d=i-q[dr]+1;
x=(ll) v[q[dr]]*d;
if (v[q[dr]]==v[i]) r[dr]=inf; else
if (x<=v[i]) r[dr]=-1; else
{
x-=v[i];
r[dr]=x/(v[i]-v[q[dr]]);
if (x%(v[i]-v[q[dr]])) r[dr]++;
r[dr]+=i;
}
if (r[dr]==-1) dr--; else break;
}
if (r[dr]!=inf) q[++dr]=i;
if ((ll) v[q[st]]*(i-q[st]+1)+a[i+1]>sol) sol=(ll) v[q[st]]*(i-q[st]+1)+a[i+1];
}
printf("%lld\n",sol);
}