Cod sursa(job #1227938)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 12 septembrie 2014 11:40:38
Problema Avioane Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <algorithm>

#define NMAX 100005
#define lint long long int
#define inf 858993459200005ll
using namespace std;

int n,v[NMAX];
lint din[NMAX];
int poz[NMAX];

void divide(int st,int dr){
    if(dr<st)
        return;

    int i=(st+dr)>>1;

    din[i]=-inf;
    for(int j=poz[st-1];j<=i;j++)
        if((n-i+1ll)*v[i]+1ll*(i-j)*v[j]>din[i]){
            din[i]=(n-i+1ll)*v[i]+1ll*(i-j)*v[j];
            poz[i]=j;
        }

    divide(st,i-1);
    divide(i+1,dr);
}

int main()
{
    ifstream cin("avioane.in");
    ofstream cout("avioane.out");

    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>v[i];
    sort(v+1,v+n+1);

    poz[0]=1;
    poz[n+1]=n;

    divide(1,n);

    lint ans=-inf;
    for(int i=1;i<=n;i++)
        if(din[i]>ans)
            ans=din[i];

    cout<<ans<<'\n';

    cin.close();
    cout.close();
    return 0;
}