Pagini recente » Cod sursa (job #104405) | Cod sursa (job #386275) | Cod sursa (job #862629) | Cod sursa (job #712021) | Cod sursa (job #1989585)
#include<bits/stdc++.h>
#define maxN 100005
using namespace std;
long long v[maxN];
deque<int> q;
int n,m;
long long sol;
inline long long S(int i,int j)
{
return 1LL*v[i]*(j-i)+1LL*v[j]*(n-j+1);
}
inline bool Lefter(int i,int j,int k)
{
//if(Panta(i,k)<Panta(i,j)) return 1;
//return 0;
long long rez1=1LL*v[j]*(n-j+1)-1LL*v[k]*(n-k+1);
long long rez2=1LL*v[i]*(n-i+1)-1LL*v[j]*(n-j+1);
return rez2*1LL*(k-j)>=1LL*rez1*(j-i);
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&v[i]);
}
sort(v+1,v+n+1);
//sol=1LL*n;
sol=1LL*v[n];
q.push_back(n);
for(int i=n-1;i>=1;i--)
{
while(q.size()>1)
{
int last=q.back();
q.pop_back();
int pre=q.back();
if(!Lefter(i,last,pre))
{
q.push_back(last);
break;
}
}
q.push_back(i);
while(q.size()>1)
{
int last=q.front();
q.pop_front();
int pre=q.front();
if(S(i,last)>=S(i,pre))
{
q.push_front(last);
break;
}
}
sol=max(sol,1LL*v[i]*(q.front()-i)+1LL*v[q.front()]*(n-q.front()+1));
}
printf("%lld\n",sol);
return 0;
}