Pagini recente » Cod sursa (job #2363730) | Cod sursa (job #1079678) | Cod sursa (job #549839) | Cod sursa (job #2682112) | Cod sursa (job #1170612)
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX_N = 1e5 + 10;
int a[MAX_N], N, ind[MAX_N];
long long cost[MAX_N];
inline long long max(long long x, long long y){
if(x > y)
return x;
return y;
}
void pre(int l, int r){
if(l > r)
return;
int mid = (l + r) / 2;
for(int i = ind[l - 1]; i <= mid && i <= ind[r + 1]; ++i)
if(1LL * a[i] * (mid - i + 1) > cost[mid]){
cost[mid] = 1LL * a[i] * (mid - i + 1);
ind[mid] = i;
}
pre(l, mid - 1);
pre(mid + 1, r);
}
int main()
{
ifstream cin("avioane.in");
cin >> N;
for(int i = 1; i <= N; ++i)
cin >> a[i];
cin.close();
sort(a + 1, a + N + 1);
ind[N + 1] = N;
pre(1, N);
long long sol = 0;
for(int i = 1; i <= N; ++i)
sol = max(sol, 1LL * a[i] * (N - i + 1) + cost[i - 1]);
ofstream cout("avioane.out");
cout << sol;
cout.close();
return 0;
}