Pagini recente » Cod sursa (job #2891741) | Cod sursa (job #1816009) | Cod sursa (job #2700708) | Cod sursa (job #2394447) | Cod sursa (job #1520675)
#include <bits/stdc++.h>
using namespace std;
typedef int64_t i64;
const int NMAX = 100010;
int N;
i64 A[NMAX];
i64 res[NMAX], pos[NMAX];
void Solve(int left, int right) {
if (left > right)
return;
int mid = (left + right) / 2;
for (int i = pos[left - 1]; i <= min(pos[right + 1], i64(mid)); ++i) {
if (res[mid] < (N - mid + 1) * A[mid] + (mid - i) * A[i]) {
res[mid] = (N - mid + 1) * A[mid] + (mid - i) * A[i];
pos[mid] = i;
}
}
Solve(left, mid - 1);
Solve(mid + 1, right);
}
int main() {
ios_base::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
freopen("debug.err", "w", stderr);
#endif
int i;
cin >> N;
for (i = 1; i <= N; ++i)
cin >> A[i];
sort(A + 1, A + N + 1);
pos[0] = 1;
pos[N + 1] = N;
Solve(1, N);
i64 answer = 0;
for (i = 1; i <= N; ++i)
answer = max(answer, res[i]);
cout << answer << '\n';
return 0;
}