Pagini recente » Cod sursa (job #232257) | Cod sursa (job #1687881) | Cod sursa (job #1398) | Cod sursa (job #3284833) | Cod sursa (job #1515981)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 100010;
int v[NMAX];
int d[NMAX];
int N;
long long castig (int business, int economy) {
long long rasp;
rasp = 1LL * (N - business + 1) * v[business] +
1LL * (business - economy) * v[economy];
return rasp;
}
void divideEtImpera (int st = 1, int dr = N) {
if (st > dr) {
return;
}
int mij = (st + dr) / 2;
for (int i = d[st - 1]; i <= d[dr + 1] && i <= mij; i++) {
long long tmp = castig (mij, i);
if (tmp > castig (mij, d[mij])) {
d[mij] = i;
}
}
divideEtImpera (st, mij - 1);
divideEtImpera (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);
d[0] = 1;
d[N + 1] = N;
divideEtImpera ();
long long ANS = 0;
for (int i = 1; i <= N; i++) {
if (castig (i, d[i]) > ANS) {
ANS = castig (i, d[i]);
}
}
printf ("%lld\n", ANS);
return 0;
}