Pagini recente » Cod sursa (job #2153276) | Cod sursa (job #873142) | Cod sursa (job #24167) | Cod sursa (job #2970054) | Cod sursa (job #1192880)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long v[100000], castig[100000], best[100000], n;
void caut(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) >= castig[mij])
{
best[mij] = i;
castig[mij] = v[mij]*(n-mij+1)+v[i] * (mij - i);
}
}
caut(st, mij - 1);
caut(mij + 1, dr);
}
}
int main()
{
FILE *fin, *fout;
fin=fopen("avioane.in", "r");
fout=fopen("avioane.out", "w");
int i;
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++) {
fscanf(fin, "%d", &v[i]);
}
sort(v+1, v + n + 1);
best[0]=1;
best[n+1]=n;
caut(1, n);
long long maxim=0;
for(i=2; i<=n; i++)
{
maxim=max(maxim, castig[i]);
}
fprintf(fout, "%lld", maxim);
}