Cod sursa(job #726977)
#include <cmath>
#include <fstream>
#include <algorithm>
#include <deque>
using namespace std;
const int INF = 0x3f3f3f3f;
int N, P[100002];
deque<int> D;
long long result;
inline int done(int x, int y) // x = a, y = b
{
if (P[x] == P[y]) return INF;
return (x - 1) + 1LL * P[y] * (x - y) / (P[x] - P[y]) + !(P[y] * (x - y) % (P[x] - P[y]) == 0);
}
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);
//D.push_back(1);
for (int i = 1; i <= N; ++i) // de la i incepe clasa I
{
while (D.size() >= 2 && done(i, D.back()) <= done(D.back(), D[D.size() - 2]))
D.pop_back();
D.push_back(i);
while (D.size() >= 2 && done(D[1], D[0]) <= i)
{
//printf("%d %d YA!\n", D.front(), done(D[1], D[0]));
D.pop_front();
}
result = max(result, 1LL * P[i + 1] * (N - i) + 1LL * P[D.front()] * (i - D.front() + 1));
}
fout << result;
fin.close();
fout.close();
}