Pagini recente » Cod sursa (job #1764361) | Cod sursa (job #606635) | Cod sursa (job #2569316) | Cod sursa (job #379802) | Cod sursa (job #1184921)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("avioane.in");
ofstream g ("avioane.out");
int n;
int v[100005];
long long win[100005], best[100005], sol;
void cautare (int st, int dr)
{
if (st <= dr)
{
long long mij = (st + dr) / 2;
for (int i = best[st - 1]; i <= min(best[dr + 1], mij); i++)
{
if (v[mij] * (n - mij + 1) + v[i] * (mij - i) >= win[mij])
{
best[mij] = i;
win[mij] = v[mij] * (n - mij + 1) + v[i] * (mij - i);
}
}
cautare(st, mij - 1);
cautare(mij + 1, dr);
}
}
int main ()
{
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
sort (v + 1, v + n + 1);
best[0] = 1;
best[n + 1] = n;
cautare(1, n);
sol = 0;
for (int i = 2; i <= n; i++)
sol = max(sol, win[i]);
g << sol;
f.close();
g.close();
return 0;
}