Cod sursa(job #2409891)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 19 aprilie 2019 15:26:47
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <iostream>
#include <algorithm>
#define INF 400000000000000
using namespace std;
int v[100010],n,opt[100010];
void solve (int l,int r,int st,int dr){
    int i,mid,poz;
    long long maxi;
    //printf ("%d %d")
    if (l>r)
        return;
    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=-INF;
    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;
        }

    }
    opt[mid]=poz;
    solve(l,mid-1,st,poz);
    solve(mid+1,r,poz,dr);
}
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);
    solve (1,n,1,n);
    long long sol=-INF;
    for (i=1;i<=n;i++)
        sol=max(sol,(long long)(i-opt[i]) * v[opt[i]] + (long long)(n-i+1) *v[i]);
    fprintf (fout,"%lld",sol);
    return 0;
}