Pagini recente » Istoria paginii runda/simulare_005/clasament | Monitorul de evaluare | Statistici Suciu Andrei (Sams200) | Cod sursa (job #1544894) | Cod sursa (job #1520156)
#include <algorithm>
#include <fstream>
using namespace std;
const int N_MAX = 1e5;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
int N;
int a[N_MAX + 5];
int64_t ans;
int64_t Cost(int b, int e) {
return int64_t(N - b) * a[b] + int64_t(b - e) * a[e];
}
void Solve(int bl, int br, int el, int er) {
if (bl > br)
return;
int m = (bl + br) / 2;
int best = el;
for (int i = el + 1; i <= min(er, m); ++i)
if (Cost(m, i) > Cost(m, best))
best = i;
ans = max(ans, Cost(m, best));
Solve(bl, m - 1, el, best);
Solve(m + 1, br, best, er);
}
int main() {
fin >> N;
for (int i = 0; i < N; ++i)
fin >> a[i];
sort(a, a + N);
Solve(0, N - 1, 0, N - 1);
fout << ans << "\n";
return 0;
}