Pagini recente » Cod sursa (job #183093) | Cod sursa (job #69105) | Cod sursa (job #2358684) | Cod sursa (job #2295077) | Cod sursa (job #2604656)
#include <algorithm>
#include <fstream>
#include <cstdio>
using namespace std;
const int NMAX = 100005;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
long long pos[NMAX] , v[NMAX] , dp[NMAX];
long long ans , n;
void solve(long long st , long long dr) {
if(st > dr) {
return;
}
long long mid = st + (dr - st) / 2;
for(int i = pos[st - 1] ; i <= pos[dr + 1] && i <= mid ; ++i) {
long long aux = v[mid] * (n - mid + 1) + v[i] * (mid - i);
if(aux > dp[mid]) {
dp[mid] = aux;
pos[mid] = i;
}
}
solve(st , mid - 1);
solve(mid + 1 , dr);
}
int main() {
fin >> n;
for(int i = 1 ; i <= n ; ++i) {
fin >> v[i];
}
sort(v + 1 , v + n + 1);
pos[0] = 1 , pos[n + 1] = n;
solve(1 , n);
for(int i = 1 ; i <= n ; ++i) {
ans = max(ans , dp[i]);
}
fout << ans;
return 0;
}