Pagini recente » Cod sursa (job #140123) | Cod sursa (job #1119926) | Cod sursa (job #1322038) | Cod sursa (job #708564) | Cod sursa (job #1173551)
// v[i] = x => pozitia x asigura profit maxim daca de la i la x avem clasa a doua,
// iar de la i+1 la n avem clasa intai
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int nmax = 100005;
int n,i,a[nmax],v[nmax];
ll best[nmax],sol;
void solve(int l,int r)
{
if(l>r) return;
int m=(l+r)/2;
for(int i=v[l-1];i<=v[r+1];i++)
{
ll aux=1LL*(m-i+1)*a[i];
if(aux>best[m])
{
best[m]=aux;
v[m]=i;
}
}
solve(l,m-1);
solve(m+1,r);
}
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);
v[0]=0; v[n+1]=n;
solve(1,n);
for(i=1;i<=n;i++)
if(a[i]!=a[i+1])
sol=max(sol,best[i]+1LL*(n-i)*a[i+1]);
printf("%lld\n",sol);
return 0;
}