Pagini recente » Cod sursa (job #676442) | Cod sursa (job #1086163) | Cod sursa (job #1171162) | Cod sursa (job #3242978) | Cod sursa (job #1228315)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 100005;
int n, a[MAX_N];
int d[MAX_N];
inline void solve(int st, int dr) {
if(st > dr) {
return;
}
int mid = (st + dr) / 2;
d[mid] = d[st - 1];
for (int i = d[st - 1] + 1; i <= d[dr + 1]; ++ i) {
if (1LL * (mid - d[mid]) * a[d[mid]] < 1LL * (mid - i) * a[i]) {
d[mid] = i;
}
}
solve(st, mid - 1);
solve(mid + 1, dr);
}
int main() {
ifstream fin("avioane.in");
ofstream fout("avioane.out");
fin >> n;
for (int i = 1; i <= n; ++ i) {
fin >> a[i];
}
sort(a + 1, a + n + 1);
d[0] = 1; d[n + 1] = n;
solve(1, n);
long long max_sum = 0;
for (int i = 1; i <= n; ++ i) {
max_sum = max(max_sum, 1LL * (i - d[i]) * a[d[i]] + 1LL * (n - i + 1) * a[i]);
}
fout << max_sum << "\n";
return 0;
}