Pagini recente » Cod sursa (job #1174151) | Cod sursa (job #1550560) | Cod sursa (job #670868) | Cod sursa (job #1967501) | Cod sursa (job #586689)
Cod sursa(job #586689)
#include <fstream>
#include <algorithm>
#include <deque>
using namespace std;
typedef unsigned long long ull;
ull N;
ull P[100002];
deque<ull> D;
ull result;
int main()
{
ifstream fin("avioane.in");
ofstream fout("avioane.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> P[i];
sort(P + 1, P + N + 1);
if (N == 1)
{
fout << P[1];
fin.close();
fout.close();
return 0;
}
for (ull i = N - 1; i >= 1; --i)
{
while (!D.empty() && P[i] * (N - i) >= P[D.back()] * (N - D.back()))
D.pop_back();
D.push_back(i);
}
for (ull i = N; i >= 2; --i)
{
while (D.front() >= i) D.pop_front();
while (D.size() > 1 && P[D[0]] * (i - D[0]) <= P[D[1]] * (i - D[1])) D.pop_front();
result = max(result, P[i] * (N - i + 1) + P[D.front()] * (i - D.front()));
}
// Brute
ull resbrute = 0;
for (ull i = 1; i < N; ++i)
for (ull j = i + 1; j <= N; ++j)
resbrute = max(resbrute, P[j] * (N - j + 1) + P[i] * ((N - i + 1) - (N - j + 1)));
fout << resbrute;
fin.close();
fout.close();
}