Cod sursa(job #1230633)

Utilizator Athena99Anghel Anca Athena99 Data 18 septembrie 2014 18:40:21
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <algorithm>
#include <fstream>
#include <deque>

using namespace std;

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

typedef long long i64;

const int nmax= 100000;

i64 v[nmax+1];
deque <i64> q;

i64 val( i64 maxim, i64 x ) {
    if ( maxim<=x ) return 0;
    else return maxim/x+1;
}

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

    i64 sol= 0, aux= 0, price= 0;
    for ( i64 i= 1; i<=n; ++i ) {
        for ( ; !q.empty() && i+val(aux+price, v[i])<=q.back()+val(aux+price, v[q.back()]); q.pop_back() ) ;
        q.push_back(i);

        if ( q.front()+val(aux+price, v[q.front()])==i ) {
            aux= (i64)v[q.front()]*(i-q.front()+1);
            price= v[q.front()];
            q.pop_front();
        } else {
            aux+= price;
        }

        sol= max(sol, aux+(i64)v[i+1]*(n-i));
    }

    fout<<sol<<"\n";

    return 0;
}