Pagini recente » Cod sursa (job #1833175) | Cod sursa (job #3161367) | Cod sursa (job #1866644) | Cod sursa (job #670870) | Cod sursa (job #1231493)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
const int N = 101000;
int n, x[N];
long long d[N], rez;
void sol(int pozx, int pozy, int solx, int soly) {
int i, mid = (pozx + pozy) / 2, split = solx;
if(pozx == pozy && d[pozx] != 0)
return;
for(i = solx; i < mid && i <= soly; ++i) {
if(1LL * x[i] * (mid - i) > d[mid]) {
split = i;
}
d[mid] = max(d[mid], 1LL * x[i] * (mid - i));
}
if(pozx == pozy)
return;
sol(pozx, mid, solx, split);
sol(mid + 1, pozy, split, pozy);
}
int main() {
int i;
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
cin >> n;
for(i = 1; i <= n; ++i) {
cin >> x[i];
d[i] = 0;
}
sort(x + 1, x + n + 1);
sol(1, n, 1, n);
for(i = 1; i <= n; ++i)
rez = max(rez, d[i] + 1LL * (n - i + 1) * x[i]);
cout << rez;
return 0;
}