Pagini recente » Cod sursa (job #1841181) | Cod sursa (job #2346136) | Cod sursa (job #1944545) | Cod sursa (job #1264588) | Cod sursa (job #1228461)
#include <cstdio>
#include <algorithm>
#define NMAX 100007
using namespace std;
int n, a[NMAX];
long long Dp[NMAX], Sol[NMAX], Ans;
void solve(int st, int dr) {
if(st <= dr) {
int med = (st + dr) / 2;
for(int i = Dp[st - 1]; i <= min(Dp[dr + 1], 1LL * med); ++i){
long long Rez = 1LL * a[med] * (n - med + 1) + 1LL * a[i] * (med - i);
if(Rez >= Sol[med]){
Dp[med] = i;
Sol[med] = Rez;
}
}
solve(st, med - 1);
solve(med + 1, dr);
}
}
int main(){
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
Dp[0] = 1;
Dp[n + 1] = n;
solve (1, n);
for (int i = 2; i <= n; ++i)
Ans = max(Ans, Sol[i]);
printf("%lld", Ans);
return 0;
}