Cod sursa(job #1520155)

Utilizator vladrochianVlad Rochian vladrochian Data 8 noiembrie 2015 13:22:27
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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 mx[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;

   mx[m] = 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);

   for (int i = 0; i < N; ++i)
      ans = max(ans, mx[i]);
   fout << ans << "\n";
   return 0;
}