Pagini recente » Cod sursa (job #2541663) | Cod sursa (job #2124945) | Cod sursa (job #324868) | Cod sursa (job #1259676) | Cod sursa (job #1520819)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,i,start[100009],a[100009];
long long ans=0LL,b[100009];
inline void Search(int left,int right)
{
if(left>right) return;
int mij=(left+right)>>1;
int i;
for( i=start[left-1]; i<=mij && i<=start[right+1] ;++i)
if(1LL* (mij-i)*a[i] +1LL*(n-mij+1)* a[mij] > b[mij])
b[mij]=1LL*(mij-i)*a[i]+1LL*(n-mij+1)*a[mij],
start[mij]=i;
if(ans<b[mij]) ans=b[mij];
Search(left, mij-1);
Search(mij+1, right);
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
sort(a+1,a+n+1);start[0]=1;start[n+1]=n;
Search(1,n);
printf("%lld\n",ans);
return 0;
}