Cod sursa(job #1195005)

Utilizator Robert29FMI Tilica Robert Robert29 Data 5 iunie 2014 18:19:26
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include<algorithm>

using namespace std;
long long sol[100002];
int v[100002], poz[100002],n;


void solve(int st,int dr)
{
    if(st>dr)
        return ;
    else
    {
        int m=(st+dr)/2;
        for(int i=poz[st-1];i<=poz[dr+1] && i<=m;++i)
        {
            if(sol[m] <= 1LL*v[m]*(n-m+1) + 1LL*v[i]*(m-i))
            {
                poz[m]=i;
                sol[m]=1LL*v[m]*(n-m+1) + 1LL*v[i]*(m-i);
            }
        }
        solve(st,m-1);
        solve(m+1,dr);
    }



}


int main()
{

    FILE*f=fopen("avioane.in","r");
    fscanf(f,"%d",&n);
    for(int i=1;i<=n;++i)
    {
        fscanf(f,"%d",&v[i]);
    }

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

    poz[0]=1;
    poz[n+1]=n;


    solve(1,n);


    long long s=0;

    for(int i=1;i<=n;++i)
        if(s<sol[i])
        {
            s=sol[i];
        }

    FILE*g=fopen("avioane.out","w");
    fprintf(g,"%lld",s);
    fclose(g);



    return 0;
}