Cod sursa(job #2411274)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 20 aprilie 2019 17:35:48
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <cstring>
#define inf 1000000000
#include<algorithm>
using namespace std;
ifstream fin ("avioane.in");
ofstream fout("avioane.out");
int i,v[100010],n;
long long sol;
int cauta_optim(int st,int dr,int poz)
{
    long long maxi=-inf,nr=0;
    for(int i=st;i<=dr&&i<=poz;i++)
        if(maxi<1LL*(poz-i)*v[i])
            maxi=1LL*(poz-i)*v[i],nr=i;
    return nr;
}
void solve(int l,int r,int st, int dr)
{
    int mid=(st+dr)/2;
    if(st>dr) return;
    int aux=cauta_optim(l,r,mid);
    sol=max(sol,1LL*(mid-aux)*v[aux]+1LL*(n-mid+1)*v[mid]);
    solve(aux,r,mid+1,dr);
    solve(l,aux,st,mid-1);
}
int main ()
{
    fin>>n;
    for(i=1;i<=n;i++) fin>>v[i];
    sort(v+1,v+n+1);
    sol=-inf;
    solve(1,n,1,n);
    fout<<sol;
    return 0;
}