Cod sursa(job #2409879)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 19 aprilie 2019 15:19:52
Problema Avioane Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;
int v[100001],n;
long long solve (int l,int r,int st,int dr){
    int i,mid,poz;
    long long sol,maxi;
    //printf ("%d %d")
    if (l>r)
        return 0;
    if (l==r)
        return v[l];
    mid=(l+r)/2; /// optimul pt mid e clar in st...dr
    /// opt[mid] = i => i ul cel mai din stanga pt care se obt costul maxim
    maxi=0;
    poz=0;
    for (i=st;i<=dr && i<=mid;i++){ /// daca am fixa pret de economy pe i
        if ((long long)(mid-i) * v[i] + (long long)(n-mid+1) *v[mid] > maxi){
            maxi=(long long)(mid-i) * v[i] + (long long)(n-mid+1) *v[mid];
            poz=i;
        }

    }
    sol=maxi;
    sol=max(sol,max(solve(l,mid-1,st,poz) , solve(mid+1,r,poz,dr)));
    return sol;
}
int main()
{
    FILE *fin=fopen ("avioane.in","r");
    FILE *fout=fopen ("avioane.out","w");
    int i;
    fscanf (fin,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    sort (v+1,v+n+1);
    fprintf (fout,"%lld",solve (1,n,1,n));
    return 0;
}