Cod sursa(job #1237671)

Utilizator Athena99Anghel Anca Athena99 Data 4 octombrie 2014 16:43:07
Problema Avioane Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <algorithm>
#include <fstream>

using namespace std;

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

const int inf= 1<<30;
const int nmax= 100000;

int v[nmax+1], d[nmax+1];;

int p( int x, int y ) {
    if ( v[x]!=v[y] ) return (v[y]*y-v[x]*x)/(v[y]-v[x])+1;
    return inf;
}

int main(  ) {
    int n, sol, l= 1, r= 1;
    fin>>n;
    for ( int i= 1; i<=n; ++i ) {
        fin>>v[i];
    }
    sort( v+1, v+n+1 );

    sol= n*v[1], d[r]= 1;
    for ( int i= 2; i<=n; ++i, ++r, d[r]= i-1 ) {
        for ( ; l<=r-1 && i>=p(d[l], d[l+1]); ++l ) ;

        sol= max( sol, v[i]*(n-i+1)+v[d[l]]*(i-d[l]) );
        for ( ; l<=r-1 && p(d[r], i)<=p(d[r-1], i); --r ) ;
    }

    fout<<sol<<"\n";

    return 0;
}