Pagini recente » Cod sursa (job #2977705) | Cod sursa (job #2818357) | Cod sursa (job #1192177) | Cod sursa (job #3182341) | Cod sursa (job #1226383)
#include <cstdio>
#include <climits>
#include <algorithm>
using namespace std;
#define NMAX 100007
int A[NMAX],f[NMAX];
int left=1,right=1,i,N;
long long MAX;
long long answer(int economy,int business)
{
return (long long)A[economy]*(business-economy)+ (long long)A[business]*(N-business+1);
}
int solve(int i,int j)
{
return (A[i]==A[j]) ? INT_MAX : (A[j]*j-A[i]*i)/(A[j]-A[i])+1;
}
void read()
{
int i;
for (i=1,scanf("%d",&N);i<=N;++i) scanf("%d",&A[i]);
sort(A+1,A+N+1);
MAX=(long long)N*A[1];
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
read();
for (i=2,f[1]=1;i<=N;++i)
{
while (left<right && solve(f[left],f[left+1])<=i) ++left;
MAX=max(MAX,answer(f[left],i));
if (A[i]==A[f[left]]) continue;
while (left<right && solve(f[right],i)<solve(f[right-1],i)) --right;
f[++right]=i;
}
printf("%lld",MAX);
return 0;
}