Cod sursa(job #2265262)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 20 octombrie 2018 21:33:30
Problema Avioane Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100000;

int a[MAXN + 5];
int ans[MAXN + 5];
int n;

void solve(int i, int j, int di, int dj) {
  if (i > j)
    return ;
  int mid = (i + j) / 2;
  int b = 0;
  for (int x = di; x <= min(mid - 1, dj); ++x)
    if (b < (n - mid + 1) * a[mid] + (mid - x) * a[x])
      ans[mid] = x, b = (n - mid + 1) * a[mid] + (mid - x) * a[x];
  solve(i, mid - 1, di, ans[mid]);
  solve(mid + 1, j, ans[mid], dj);
}

int main() {
  freopen("avioane.in", "r", stdin);
  freopen("avioane.out", "w", stdout);

  scanf("%d", &n);
  for (int i = 1; i <= n; ++i)
    scanf("%d", &a[i]);

  sort(a + 1, a + n + 1);
  solve(1, n, 1, n);

  int sol = 0;
  for (int i = 1; i <= n; ++i)
    sol = max(sol, (n - i + 1) * a[i] + (i - ans[i]) * a[ans[i]]);
  printf("%d\n", sol);

  return 0;
}