Pagini recente » Borderou de evaluare (job #1569385) | Cod sursa (job #1977238) | Cod sursa (job #1585659) | Cod sursa (job #1238018) | Cod sursa (job #586692)
Cod sursa(job #586692)
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
#define NM 100005
#define LL long long
int V[NM], N;
int main()
{
freopen ("avioane.in", "r", stdin);
freopen ("avioane.out", "w", stdout);
scanf ("%d", &N);
for (int i = 1; i <= N; ++i) scanf ("%d", &V[i]);
sort (V + 1, V + N + 1);
LL best = 0;
for (int i = 1; i < N; ++i)
{
int st = i+1, dr = N;
while (dr - st > 19)
{
int stmij = (2*st + dr)/3;
int drmij = (st + 2*dr)/3;
if ((LL)V[i]*(stmij-i)+(LL)V[stmij]*(N-stmij+1) > (LL)V[i]*(drmij-i)+(LL)V[drmij]*(N-drmij+1)) dr = drmij;
else st = stmij;
}
for (int j = st; j <= dr; ++j)
best = max (best, (LL)V[j]*(N-j+1) + (LL)V[i]*(j-i));
}
printf ("%lld", best);
return 0;
}