Cod sursa(job #1520156)

Utilizator vladrochianVlad Rochian vladrochian Data 8 noiembrie 2015 13:24:44
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#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;
}