Cod sursa(job #2502885)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 1 decembrie 2019 19:13:51
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

int_fast64_t n;

int_fast64_t ans;

int_fast64_t v[100009];

int_fast64_t caut (int_fast64_t st, int_fast64_t dr, int_fast64_t poz)
{
    int_fast64_t sum=-1;
    int_fast64_t nr=0;
    for (int_fast64_t i=st; i<=dr && i<=poz; ++i)
    {
        if (sum<(poz-i)*v[i])
        {
            sum=(poz-i)*v[i];
            nr=i;
        }
    }
    return nr;
}

void solve (int_fast64_t st, int_fast64_t dr, int_fast64_t dst, int_fast64_t ddr)
{
    if (st>dr)
    {
        return;
    }
    int_fast64_t mij=(st+dr)/2;
    int_fast64_t temp=caut(dst,ddr,mij);
    ans=max(ans,(mij-temp)*v[temp]+(n-mij+1)*v[mij]);
    solve(st,mij-1,dst,temp);
    solve(mij+1,dr,temp,ddr);
}

int main()
{
    ifstream fin ("avioane.in");
    ofstream fout ("avioane.out");
    fin>>n;
    for (int_fast64_t i=1; i<=n; ++i)
    {
        fin>>v[i];
    }
    sort(v+1,v+n+1);
    ans=-1;
    solve(1,n,1,n);
    fout<<ans<<"\n";
    return 0;
}