Pagini recente » Cod sursa (job #1492672) | Cod sursa (job #2976927) | Cod sursa (job #1882824) | Cod sursa (job #2207633) | Cod sursa (job #1194517)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n;
int v[100002], poz[100002];
long long solutie, sol[100002];
void calc (int st, int dr) {
int i, m = (st + dr) >> 1;
sol[m] = -2000000000;
for (i = poz[st - 1]; i <= poz[dr + 1]; i ++) {
if (i > m)
break;
if ((m - i + 1) * (long long)v[i] > sol[m]) {
sol[m] = (m - i + 1) * (long long)v[i];
poz[m] = i;
}
}
if (m - 1 >= st)
calc (st, m - 1);
if (dr >= m + 1)
calc (m + 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);
poz[n + 1] = n;
calc (1, n);
for (int i = 2; i <= n; i ++)
if ((n - i + 1) * (long long)v[i] + sol[i - 1] > solutie)
solutie = (n - i + 1) * (long long)v[i] + sol[i - 1];
printf ("%lld\n", solutie);
return 0;
}