Pagini recente » Cod sursa (job #3292668) | Cod sursa (job #1466754) | Cod sursa (job #268726) | Cod sursa (job #337830) | Cod sursa (job #1228460)
#include <fstream>
#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) + 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;
}