Pagini recente » Cod sursa (job #866465) | Cod sursa (job #516485) | Cod sursa (job #1697175) | Cod sursa (job #2284404) | Cod sursa (job #604435)
Cod sursa(job #604435)
#include <cstdio>
#include <algorithm>
#define MAXN 100010
#define ll long long
using namespace std;
int N, A[MAXN], L[MAXN];
ll R[MAXN];
void rec(int lf, int rt) {
if(lf > rt) return ;
int mid = (lf + rt) / 2;
R[mid] = -1;
for(int i = L[lf - 1]; i <= L[rt + 1]; i++) {
if (i > mid) break;
ll x = 1LL * (mid - i + 1) * A[i];
if(R[mid] < x) {
L[mid] = i;
R[mid] = x;
}
}
rec(lf, mid - 1);
rec(mid + 1, rt);
}
int main() {
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
scanf("%d\n", &N);
for(int i = 1; i <= N; i++)
scanf("%d", &A[i]);
sort(A + 1, A + N + 1);
L[N + 1] = N;
rec(1, N);
ll sol = 0;
for(int i = 2; i <= N; i++) {
ll x = 1LL * (N - i + 1) * A[i] + R[i - 1];
if(x > sol) {
sol = x;
}
}
printf("%lld\n", sol);
return 0;
}