Pagini recente » Cod sursa (job #1465000) | Cod sursa (job #953222) | Cod sursa (job #216699) | Cod sursa (job #382873) | Cod sursa (job #1231499)
#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)
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 - 1, solx, split);
sol(mid + 1, pozy, split, pozy);
}
char a[2000000];
int p;
inline int ter() {
int r = 0;
while(a[p] >= '0' && a[p] <= '9')
r = r * 10 + a[p++] - '0';
++p;
return r;
}
int main() {
int i;
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
cin >> n;
cin.get();
cin.getline(a, 2000000);
for(i = 1; i <= n; ++i) {
x[i] = ter();
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;
}