Pagini recente » Cod sursa (job #3261559) | Cod sursa (job #2804710) | Cod sursa (job #79094) | Cod sursa (job #2608162) | Cod sursa (job #1534208)
#include <bits/stdc++.h>
#define INF (1 << 30)
#define LLINF (1LL << 62)
#define mod 666013
using namespace std;
typedef long long LL;
LL n, i, sol, mx;
LL v[100005];
LL ternary(LL st, LL dr, LL val)
{
if(st > dr)
return 0;
if(st == dr)
{
return (v[st] - val) * (n - st + 1);
}
if(st == dr - 1)
{
LL mij1 = st;
LL mij2 = dr;
return max((v[mij1] - val) * (n - mij1 + 1), (v[mij2] - val) * (n - mij2 + 1));
}
LL mij1 = st + (dr - st) / 3;
LL mij2 = st + ( 2 * (dr - st) ) / 3;
if( (v[mij1] - val) * (n - mij1 + 1) > (v[mij2] - val) * (n - mij2 + 1) )
return max( ternary(st, mij2 - 1, val), (v[mij1] - val) * (n - mij1 + 1) );
else
return max( ternary(mij1 + 1, dr, val), (v[mij2] - val) * (n - mij2 + 1) );
}
int main()
{
freopen("avioane.in", "r", stdin);
freopen("avioane.out", "w", stdout);
scanf("%lld", &n);
for(i = 1; i <= n; i++)
scanf("%lld", &v[i]);
sort(v + 1, v + n + 1);
for(i = 1; i <= n; i++)
{
sol = v[i] * (n - i + 1);
sol += ternary(i + 1, n, v[i]);
mx = max(sol, mx);
}
printf("%lld", mx);
return 0;
}