Pagini recente » Cod sursa (job #2251747) | Cod sursa (job #213003) | Cod sursa (job #807161) | Cod sursa (job #737105) | Cod sursa (job #2409891)
#include <cstdio>
#include <iostream>
#include <algorithm>
#define INF 400000000000000
using namespace std;
int v[100010],n,opt[100010];
void solve (int l,int r,int st,int dr){
int i,mid,poz;
long long maxi;
//printf ("%d %d")
if (l>r)
return;
mid=(l+r)/2; /// optimul pt mid e clar in st...dr
/// opt[mid] = i => i ul cel mai din stanga pt care se obt costul maxim
maxi=-INF;
poz=0;
for (i=st;i<=dr && i<=mid;i++){ /// daca am fixa pret de economy pe i
if ((long long)(mid-i) * v[i] + (long long)(n-mid+1) *v[mid] > maxi){
maxi=(long long)(mid-i) * v[i] + (long long)(n-mid+1) *v[mid];
poz=i;
}
}
opt[mid]=poz;
solve(l,mid-1,st,poz);
solve(mid+1,r,poz,dr);
}
int main()
{
FILE *fin=fopen ("avioane.in","r");
FILE *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);
solve (1,n,1,n);
long long sol=-INF;
for (i=1;i<=n;i++)
sol=max(sol,(long long)(i-opt[i]) * v[opt[i]] + (long long)(n-i+1) *v[i]);
fprintf (fout,"%lld",sol);
return 0;
}