Pagini recente » Cod sursa (job #29575) | Cod sursa (job #2338754) | Cod sursa (job #2792562) | Cod sursa (job #950164) | Cod sursa (job #1230633)
#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;
}