Pagini recente » Cod sursa (job #2907926) | Cod sursa (job #1135773) | Cod sursa (job #875703) | Cod sursa (job #2000530) | Cod sursa (job #1872797)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nmax=100005;
struct segm
{
long long a,b;
}v[nmax],st[nmax];
int val[nmax];
int i,n,u,p;
long long j,mx;
bool del(segm unu,segm doi,segm trei)
{
return 1LL*(doi.b-unu.b)*(unu.a-trei.a)>1LL*(unu.a-doi.a)*(trei.b-unu.b);
}
int main()
{
ifstream f("avioane.in");
ofstream g("avioane.out");
f>>n;
for(i=1;i<=n;i++)
f>>val[i];
sort(val+1,val+n+1);
for(i=1;i<=n;i++)
{
v[i].b=1LL*(n-i+1)*val[i];
v[i].a=-val[i];
}
for(i=n;i>=1;i--)
{
while(u>=2&&del(st[u-1],st[u],v[i]))
u--;
u++;st[u]=v[i];
}
p=1;
for(i=n;i>=1;i--)
{
j=n-i+1;
while(p<u&&(st[p+1].b-st[p].b)>(st[p].a-st[p+1].a)*j)
p++;
if(v[i].b+st[p].a*j+st[p].b>mx)
mx=1LL*(v[i].b+st[p].a*j+st[p].b);
}
g<<mx;
return 0;
}