Pagini recente » Cod sursa (job #1872079) | Cod sursa (job #2018634) | Cod sursa (job #202286) | Istoria paginii runda/oni_11_12_8/clasament | Cod sursa (job #2453957)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("avioane.in");
ofstream g ("avioane.out");
constexpr int NMAX = 1e5 + 5;
int n;
long long sol;
int a[NMAX];
int caut (int st, int dr, int poz)
{
long long sum = -1;
int nr=0;
for (int i=st; i<=dr && i<=poz; ++i)
if (sum < 1LL*(poz-i)*a[i])
{
sum = 1LL * (poz-i) * a[i];
nr = i;
}
return nr;
}
void solve (int st, int dr, int dst, int ddr)
{
if (st > dr) return;
int mij = (st + dr) / 2;
int aux = caut(dst, ddr, mij);
sol = max(sol, 1LL*(mij - aux)*a[aux] + 1LL * (n - mij + 1) * a[mij]);
solve(st, mij-1, dst, aux);
solve(mij+1, dr, aux, ddr);
}
int main()
{
f >> n;
for (int i=1; i<=n; ++i)
f >> a[i];
sort(a + 1, a + n + 1);
sol = -1;
solve(1, n, 1, n);
g << sol << '\n';
return 0;
}