Pagini recente » Cod sursa (job #2148996) | Cod sursa (job #1683499) | Cod sursa (job #98604) | Cod sursa (job #2162511) | Cod sursa (job #591957)
Cod sursa(job #591957)
#include <fstream>
#include <algorithm>
using namespace std;
const int nmax = 100010;
long long A[nmax], Poz[nmax];
long long Sol[nmax], val, S, N;
void calc(long long st, long long dr)
{
long long m = (st + dr) >> 1, i;
for( i = Poz[st - 1]; i <= Poz[dr + 1]; i++)
{
val = (m - i + 1) * A[i];
if(val > Sol[m])
Sol[m] = val, Poz[m] = i;
}
if(m < dr) calc(m + 1, dr);
if(st < m) calc(st, m - 1);
}
int main()
{
ifstream in("avioane.in");
ofstream out("avioane.out");
in >> N;
long long i;
for(i = 1; i <= N; i++)
in >> A[i];
sort(A + 1, A + 1 + N);
Poz[N + 1] = N;
calc(1, N);
for(i = 2; i <= N; i++)
{
val = Sol[i - 1] + 1LL * A[i] * (N - i + 1);
if( val > S )
S = val;
}
out << S << "\n";
return 0;
}