Pagini recente » Cod sursa (job #2177056) | Cod sursa (job #888249) | Cod sursa (job #2415460) | Cod sursa (job #2028832) | Cod sursa (job #2409879)
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int v[100001],n;
long long solve (int l,int r,int st,int dr){
int i,mid,poz;
long long sol,maxi;
//printf ("%d %d")
if (l>r)
return 0;
if (l==r)
return v[l];
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=0;
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;
}
}
sol=maxi;
sol=max(sol,max(solve(l,mid-1,st,poz) , solve(mid+1,r,poz,dr)));
return sol;
}
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);
fprintf (fout,"%lld",solve (1,n,1,n));
return 0;
}