Pagini recente » Cod sursa (job #2977361) | Cod sursa (job #2683012) | Cod sursa (job #2690516) | Cod sursa (job #850214) | Cod sursa (job #1194873)
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX_N = 100005;
ifstream f("avioane.in");
ofstream g("avioane.out");
int n, a[MAX_N];
long long best[MAX_N], win[MAX_N], ans;
void solve (int lo, int hi) {
if (lo <= hi) {
long long mid = (lo + hi) / 2;
for (int i = best[lo - 1]; i <= min (best[hi + 1], mid); i++)
if (1LL * a[mid] * (n - mid + 1) + 1LL * a[i] * (mid - i) >= win[mid]) {
best[mid] = i;
win[mid] = a[mid] * (n - mid + 1) + a[i] * (mid - i);
}
solve (lo, mid - 1);
solve (mid + 1, hi);
}
}
int main() {
f >> n;
for (int i = 1; i <= n; i++)
f >> a[i];
sort (a + 1, a + n + 1);
best[0] = 1;
best[n + 1] = n;
solve (1, n);
for (int i = 2; i <= n; i++)
ans = max (ans, win[i]);
g << ans;
return 0;
}