Cod sursa(job #1190074)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 24 mai 2014 14:00:46
Problema Avioane Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.9 kb
#include<fstream>
#include<algorithm>

using namespace std;

typedef long long int lld;
const int NMAX = 100000+5;

int N;
int V[NMAX];
int P[NMAX];
lld Best[NMAX];
lld sol;

void Solve(int lo,int hi)
{
    if(lo>hi) return;

    int mi=(lo+hi)/2,i;
    lld sum;

    for(i=P[lo-1]; i<=P[hi+1]; i++)
    {
        sum=1LL*(mi-i+1)*V[i]+1LL*(N-mi)*V[mi+1];
        if(sum>Best[mi])
        {
            Best[mi]=sum;
            P[mi]=i;
        }
    }
    Solve(lo,mi-1);
    Solve(mi+1,hi);
}

int main()
{
    int i;

    ifstream fin("avioane.in");
    ofstream fout("avioane.out");

    fin>>N;

    for(i=1; i<=N; i++)
        fin>>V[i];

    sort(V+1,V+N+1);

    P[N+1]=N;

    Solve(1,N);

    for(i=1; i<=N; i++)
        if(V[i]==V[i+1]) continue;
        else sol=max(sol,Best[i]);

    fout<<sol;

    fin.close();
    fout.close();

    return 0;
}