Pagini recente » Cod sursa (job #3247024) | Cod sursa (job #2844259) | Cod sursa (job #1367977) | Cod sursa (job #1043491) | Cod sursa (job #2340284)
#include <bits/stdc++.h>
using namespace std;
const int maxN=1e5+4;
const int INF=1<<30;
int p[maxN];
int leftsum[maxN];
int n,v[maxN];
void divimp(int st,int dr)
{
if(st>dr)
return;
int mij=st+(dr-st)/2;
leftsum[mij]=-INF;
int lim=min(mij,p[dr+1]);
for(int i=p[st-1];i<=lim;i++)
if(leftsum[mij]<(mij-i+1)*v[i]){
leftsum[mij]=(mij-i+1)*v[i];
p[mij]=i;
}
divimp(st,mij-1);
divimp(mij+1,dr);
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
sort(v+1,v+n+1);
p[n+1]=n;
divimp(1,n);
int sol=0;
for(int i=0;i<=n;i++)
sol=max(sol,leftsum[i]+(n-i)*v[i+1]);
printf("%d",sol);
return 0;
}