Pagini recente » Cod sursa (job #2613149) | Cod sursa (job #2052108) | Cod sursa (job #1402354) | Cod sursa (job #2136563) | Cod sursa (job #591953)
Cod sursa(job #591953)
#include <fstream>
#include <algorithm>
using namespace std;
const int nmax = 100010;
int A[nmax], Poz[nmax];
long long Sol[nmax], val, S, N;
void calc(int st, int dr)
{
int m = (st + dr) >> 1, i;
for( i = Poz[st - 1]; i <= Poz[dr + 1]; i++)
{
val = 1LL * (m - i + 1) * A[i];
if(val > Sol[m])
Sol[m] = val, Poz[m] = i;
}
if(m <= dr - 1) calc(m + 1, dr);
if(st + 1 >= m) calc(st, m - 1);
}
int main()
{
ifstream in("avioane.in");
ofstream out("avioane.out");
in >> N;
int 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;
}