Cod sursa(job #1189785)

Utilizator jul123Iulia Duta jul123 Data 23 mai 2014 16:05:36
Problema Avioane Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 1 kb
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

long long v[100000], castig[100000], best[100000], n;

void caut(int st, int dr)
{
    if(st <= dr) {
        long long mij = (st + dr) / 2;
        for(int i = best[st-1]; i <= min(best[dr+1], mij); i++)
        {
            if(v[mij] * (n - mij+1) + v[i] * (mij - i) >= castig[mij])
            {
                best[mij] = i;
                castig[mij] = v[mij]*(n-mij+1)+v[i] * (mij - i);
            }
        }
    caut(st, mij - 1);
    caut(mij + 1, dr);
    }
}

int main()
{
    FILE *fin, *fout;
    fin=fopen("avioane.in", "r");
    fout=fopen("avioane.out", "w");

    int i;
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; i++) {
        fscanf(fin, "%d", &v[i]);
    }
    sort(v+1, v + n + 1);
    best[0]=1;
    best[n+1]=n;
    caut(1, n);
    long long maxim=0;
    for(i=2; i<=n; i++)
    {
        maxim=max(maxim, castig[i]);

    }
    fprintf(fout, "%lld", maxim);

}