Cod sursa(job #1717394)

Utilizator DjokValeriu Motroi Djok Data 14 iunie 2016 19:39:26
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<bits/stdc++.h>
using namespace std;

int i,n,a[100005],p[100005];
long long rs,maybe[100005];

void Solve(int left,int right) {
    int pivot=(left+right)/2;

    maybe[pivot]=-1e18;

    for(int i=p[left-1];i<=p[right+1];++i)
    {
      if(maybe[pivot]>=1LL*(pivot-i+1)*a[i] || i>pivot) continue;

      maybe[pivot]=1LL*(pivot-i+1)*a[i]; p[pivot]=i;
    }

    if(left<pivot) Solve(left,pivot-1);
    if(right>pivot) Solve(pivot+1,right);
}

int main()
{
  ifstream cin("avioane.in");
  ofstream cout("avioane.out");

  ios_base::sync_with_stdio(0);

  cin>>n; p[n+1]=n;
  for(i=1;i<=n;++i) cin>>a[i];

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

  Solve(1,n);

  for(i=0;i<=n;++i) rs=max(rs,maybe[i]+1LL*(n-i)*a[i+1]);

  cout<<rs<<'\n';

 return 0;
}