Pagini recente » Cod sursa (job #3142049) | Cod sursa (job #149120) | Cod sursa (job #1089860) | Cod sursa (job #2646654) | Cod sursa (job #1450062)
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int Nmax = 100010;
int n , L , i , ans;
int a[Nmax] , left[Nmax];
queue < int > q;
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);
L = 1; left[1] = a[1];
for (i = 2; i <= n; ++i)
{
left[i] = (i - L + 1) * a[L];
while (!q.empty())
{
if ((i - q.front() + 1) * a[q.front()] > left[i])
left[i] = (i - q.front() + 1) * a[q.front()],
L = q.front(),
q.pop();
else break;
}
if (q.empty() || a[i] != a[q.back()])
q.push(i);
if (a[i] > left[i])
{
L = i;
left[i] = a[i];
while (!q.empty())
q.pop();
}
}
for (i = 1; i < n; ++i)
ans = max(ans , left[i] + (n - i) * a[i+1]);
ans = max(ans , left[n]);
printf("%d\n", ans);
return 0;
}