Pagini recente » Cod sursa (job #1025094) | Cod sursa (job #2539693) | Cod sursa (job #2835204) | Cod sursa (job #821509) | Cod sursa (job #1450203)
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int Nmax = 100010;
int n , L , i;
int a[Nmax] , indice[Nmax];
long long ans;
long long left[Nmax];
int Binary_Search(int left , int right)
{
long long anterior = 0;
for (int mid = (left + right) >> 1; left <= right; mid = (left + right) >> 1)
{
if (1LL * (i - mid + 1) * a[mid] >= anterior)
{
anterior = 1LL * (i - mid + 1) * a[mid];
right = mid - 1;
}
else left = mid + 1;
}
return left;
}
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &a[i]);
sort(a + 1 , a + n + 1);
left[1] = 1LL * a[1]; indice[1] = 1;
for (i = 2; i <= n; ++i)
{
int poz = Binary_Search(indice[i-1] , i);
left[i] = 1LL * (i - poz + 1) * a[poz]; indice[i] = poz;
}
for (i = 0; i <= n; ++i)
ans = max(ans , left[i] + 1LL * (n - i) * a[i+1]);
printf("%lld\n", ans);
return 0;
}