Pagini recente » Cod sursa (job #197979) | Cod sursa (job #442938) | Cod sursa (job #2106043) | Cod sursa (job #674443) | Cod sursa (job #604433)
Cod sursa(job #604433)
#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 - lf) / 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 = (N - i + 1) * A[i] + R[i - 1];
if(x > sol) {
sol = x;
}
}
printf("%lld\n", sol);
return 0;
}