Pagini recente » Cod sursa (job #142622) | Cod sursa (job #1671523) | Cod sursa (job #2310173) | Cod sursa (job #760771) | Cod sursa (job #789242)
Cod sursa(job #789242)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
#define nmax 100010
#define ll long long
ll now[nmax], ans[nmax];
int N, A[nmax], S[nmax];
void Compute(int left, int right)
{
if(left > right) return ;
int mid = (left + right) / 2;
for(int i = S[left - 1]; i <= min(mid, S[right + 1]); i ++)
{
ll val = 1LL * (mid - i + 1) * A[i];
if(now[mid] < val)
{
now[mid] = val;
S[mid] = i;
}
}
Compute(left, mid - 1);
Compute(mid + 1, right);
}
int main()
{
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
int i;
scanf("%i", &N);
for(i = 1; i <= N; i++)
scanf("%i", &A[i]);
sort(A + 1, A + N + 1);
S[N + 1] = N;
Compute(1, N);
ll sol = 0;
for(i = 2; i <= N; i++)
sol = max(sol, now[i - 1] + 1LL * A[i] * (N - i + 1));
printf("%lld\n", sol);
return 0;
}