Cod sursa(job #2052506)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 30 octombrie 2017 17:58:49
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
//O(n log n)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fi("avioane.in");
ofstream fo("avioane.out");
long long rez;
int n,i,A[100001],D[100001];

void solve(int st, int dr)
{
    int mij,i;
    mij=(st+dr)/2;
    long long maxim=0LL,val=0LL;
    if(st>dr)
        return;
    for(i=D[st-1]; i<=D[dr+1] && i<mij; i++)
    {
        val=1LL*(mij-i)*A[i]+1LL*(n-mij+1)*A[mij];
        if(val>maxim)
        {
            maxim=val;
            D[mij]=i;
        }
    }
    if(maxim>rez)
        rez=maxim;
    solve(st,mij-1);
    solve(mij+1,dr);
}

int main()
{
    fi>>n;
    for(i=1; i<=n; i++)
        fi>>A[i];
    sort(A+1,A+n+1);
    D[0]=1;
    D[n+1]=n;
    solve(1,n);
    fo<<rez<<"\n";
    fi.close();
    fo.close();
    return 0;
}