Pagini recente » Cod sursa (job #2832533) | Cod sursa (job #1805164) | Cod sursa (job #1997284) | Cod sursa (job #2961171) | Cod sursa (job #2923984)
#include <bits/stdc++.h>
#define int ll
using ll = long long;
const int MAX_N = 100000;
int a[MAX_N + 1], best[MAX_N + 1], pos[MAX_N + 1];
void divide(int n, int l, int r) {
if (l > r) {
return;
}
int mid = (l + r) / 2;
for (int i = pos[l - 1]; i <= std::min(mid, pos[r + 1]); i++) {
if (best[mid] < a[mid] * (n - mid + 1) + a[i] * (mid - i)) {
best[mid] = a[mid] * (n - mid + 1) + a[i] * (mid - i);
pos[mid] = i;
}
}
divide(n, l, mid - 1);
divide(n, mid + 1, r);
}
signed main() {
std::ifstream fin("avioane.in");
std::ofstream fout("avioane.out");
int n;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
std::sort(a + 1, a + n + 1);
pos[0] = 1;
pos[n + 1] = n;
divide(n, 1, n);
ll answer = 0;
for (int i = 1; i <= n; i++) {
answer = std::max(answer, best[i]);
}
fout << answer;
return 0;
}