Pagini recente » Cod sursa (job #993360) | Cod sursa (job #1000596) | Cod sursa (job #519217) | Cod sursa (job #2295415) | Cod sursa (job #1515861)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define LL long long
const int NMAX = 1e5 + 5;
int n, ticket[NMAX], pos[NMAX];
LL sol[NMAX];
void solve (int left, int right) {
if(left > right)
return;
int i, mid = (left + right) / 2;
LL sum;
for(i = max(mid, pos[left - 1]); i <= pos[right + 1]; ++ i) {
sum = ((LL)i - mid) * ticket[mid] + ((LL)n - i + 1) * ticket[i];
if(sum > sol[mid]) {
sol[mid] = sum;
pos[mid] = i;
}
}
solve(left, mid - 1);
solve(mid + 1, right);
}
int main() {
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
int i;
LL ans;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d", &ticket[i]);
sort(ticket + 1, ticket + 1 + n);
pos[n + 1] = n;
solve(1, n);
ans = -1;
for(i = 1; i <= n; ++ i)
ans = max(ans, sol[i]);
printf("%lld\n", ans);
return 0;
}