Pagini recente » Cod sursa (job #2544496) | Cod sursa (job #2419908) | Cod sursa (job #2256825) | Cod sursa (job #3192171) | Cod sursa (job #2340304)
#include <bits/stdc++.h>
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
const int NMAX=1e5+5;
int A[NMAX], N;
int poz[NMAX];
long long ans[NMAX];
long long sol=0;
inline void Read ()
{
f.tie(NULL);
f>>N;
for(int i=1; i<=N; ++i)
f>>A[i];
sort(A+1, A+N+1);
return;
}
inline void Solve (int Left, int Right)
{
int Mid=(Left+Right)/2;
for(int i=poz[Left-1]; i<=poz[Right+1] && i <= Mid; ++i)
if((Mid-i+1)*(1LL*A[i]) > ans[Mid])
{
ans[Mid]=(Mid-i+1)*(1LL*A[i]);
poz[Mid]=i;
}
if(Mid >= Left+1)
Solve(Left, Mid-1);
if(Right >= Mid+1)
Solve(Mid+1, Right);
}
int main()
{
Read();
poz[0]=1;
poz[N+1]=N;
Solve(1, N);
for(int i=2; i<=N; ++i)
sol=max(sol, (N-i+1)*(1LL*A[i])+ans[i-1]);
g<<sol<<'\n';
exit(0);
return 0;
}