Pagini recente » Cod sursa (job #2612934) | Cod sursa (job #333569) | Cod sursa (job #1349990) | Cod sursa (job #1413749) | Cod sursa (job #634592)
Cod sursa(job #634592)
#include <cmath>
#include <fstream>
#include <algorithm>
#include <deque>
using namespace std;
int N;
int P[100002], used[100002];
long long maxP[100002];
long long 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);
int maxn = 1;
used[1] = 1;
maxP[1] = P[1];
for (int i = 2; i <= N; ++i)
{
if (P[i] != P[i - 1])
{
double when = 1.0 * P[maxn] * (i - maxn) / (P[i] - P[maxn]);
int iwhen = floor(when);
if (i + iwhen <= N)
{
used[i + iwhen] = i;
maxP[i + iwhen] = P[i] * (iwhen + 1);
}
maxn = i;
}
if (used[i] == 0)
{
used[i] = used[i - 1];
maxP[i] = 1LL * P[used[i - 1]] * (i - used[i - 1] + 1);
}
}
for (int i = N; i >= 1; --i)
result = max(result, 1LL * P[i] * (N - i + 1) + maxP[i - 1]);
fout << result;
fin.close();
fout.close();
}