Pagini recente » Cod sursa (job #1342552) | Cod sursa (job #2534422) | Cod sursa (job #2082568) | Cod sursa (job #1035582) | Cod sursa (job #585541)
Cod sursa(job #585541)
#include <cstdio>
#include <algorithm>
using namespace std;
#define nmax 100222
int sol, R[nmax], A[nmax], n, par[nmax];
void doit(int a, int b)
{
if(a > b)
return;
int c = (a + b) / 2, i;
R[c] = -1;
for(i = par[a - 1]; i <= par[b + 1]; ++i)
if((c - i + 1) * A[i] > R[c])
R[c] = (c - i + 1) * A[i], par[c] = i;
doit(a, c - 1);
doit(c + 1, b);
}
int main()
{
int i;
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; ++i)
scanf("%d", &A[i]);
sort(A + 1, A + n + 1);
par[0] = 0;
par[n + 1] = n;
doit(1, n);
for(i = 2; i <= n; ++i)
if((n - i + 1) * A[i] + R[i - 1] > sol)
sol = (n - i + 1) * A[i] + R[i - 1];
printf("%d\n", sol);
return 0;
}