Pagini recente » Cod sursa (job #717750) | Cod sursa (job #1329450) | Cod sursa (job #465586) | Cod sursa (job #1313032) | Cod sursa (job #1228242)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define FIN 1LL * (1 << 60)
#define MAXN 100000
int N;
int v[MAXN + 5], pos[MAXN + 5];
long long dp[MAXN + 5];
void solve(int left, int right) {
if(left > right)
return;
int mid = (left + right) / 2;
dp[mid] = -FIN;
for(int i = pos[left - 1]; i <= pos[right + 1]; ++i) {
long long sum = 1LL * (mid - i) * v[i] + 1LL * (N - mid + 1) * v[mid];
if(sum > dp[mid]) {
dp[mid] = sum;
pos[mid] = i;
}
}
solve(left, mid - 1);
solve(mid + 1, right);
}
int main()
{
ifstream cin("avioane.in");
ofstream cout("avioane.out");
long long max_sum = -FIN;
cin >> N;
for(int i = 1; i <= N; ++i) {
cin >> 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) {
if(dp[i] > max_sum)
max_sum = dp[i];
}
cout << max_sum;
return 0;
}