Cod sursa(job #1228368)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 13 septembrie 2014 22:57:57
Problema Avioane Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int n,dirty[100005],cash[100005];
long long v[1000005];
void solv(int st,int dr)
{
    if(st>dr)
    return ;
    int mi,i;
    long long sol;
    sol=0;
    mi=(st+dr)/2;
    for(i=dirty[st-1];i<=dirty[dr+1] && i<=mi;i++)
        if(sol<(n-mi+1)*cash[mi]+cash[i]*(mi-i))
        {
            sol=1LL*(n-mi+1)*cash[mi]+1LL*cash[i]*(mi-i);
            v[mi]=sol;
            dirty[mi]=i;
        }
    solv(st,mi-1);
    solv(mi+1,dr);
}
int main()
{
   freopen("avioane.in","r",stdin);
   freopen("avioane.out","w",stdout);
   int i;
   long long sol;
   sol=0;
   scanf("%d",&n);
   for(i=1;i<=n;i++)
   scanf("%d",&cash[i]);
    sort(cash+1,cash+n+1);
    dirty[0]=1;
    dirty[n+1]=n;
    solv(1,n);
    for(i=1;i<=n;i++)
    if(v[i]>sol)
    sol=v[i];
    printf("%lld\n",sol);
    return 0;
}