Cod sursa(job #2340802)

Utilizator stefantagaTaga Stefan stefantaga Data 11 februarie 2019 08:16:54
Problema Avioane Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("avioane.in");
ofstream g("avioane.out");
int v[100005],n,poz[100005];
long long ans[100005];
void rezv (int left, int right)
{
    int mid=(left+right)/2;
    for(int i=poz[left-1]; i<=poz[right+1] && i <= mid;i++)
        if((mid-i+1)*(1LL*v[i]) > ans[mid])
        {
            ans[mid]=(mid-i+1)*(1LL*v[i]);

            poz[mid]=i;
        }

    if(mid >= left+1)
        rezv(left, mid-1);

    if(right >= mid+1)
        rezv(mid+1, right);
}int i;
long long sol;
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>v[i];
    }
    sort (v+1,v+n+1);
    poz[0]=1;
    poz[n+1]=n;
    rezv(1,n);
    for(i=2;i<=n;i++)
    {
        sol=max(sol,(n-i+1)*(1LL*v[i])+ans[i-1]);
    }
    g<<sol;
    return 0;
}