Cod sursa(job #2265265)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 20 octombrie 2018 21:34:46
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 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;
  long long b = 0;
  for (int x = di; x <= min(mid - 1, dj); ++x)
    if (b < 1LL * (n - mid + 1) * a[mid] + 1LL * (mid - x) * a[x])
      ans[mid] = x, b = 1LL * (n - mid + 1) * a[mid] + 1LL * (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);

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

  return 0;
}