Pagini recente » Borderou de evaluare (job #1350857) | Cod sursa (job #2411274)
#include <fstream>
#include <cstring>
#define inf 1000000000
#include<algorithm>
using namespace std;
ifstream fin ("avioane.in");
ofstream fout("avioane.out");
int i,v[100010],n;
long long sol;
int cauta_optim(int st,int dr,int poz)
{
long long maxi=-inf,nr=0;
for(int i=st;i<=dr&&i<=poz;i++)
if(maxi<1LL*(poz-i)*v[i])
maxi=1LL*(poz-i)*v[i],nr=i;
return nr;
}
void solve(int l,int r,int st, int dr)
{
int mid=(st+dr)/2;
if(st>dr) return;
int aux=cauta_optim(l,r,mid);
sol=max(sol,1LL*(mid-aux)*v[aux]+1LL*(n-mid+1)*v[mid]);
solve(aux,r,mid+1,dr);
solve(l,aux,st,mid-1);
}
int main ()
{
fin>>n;
for(i=1;i<=n;i++) fin>>v[i];
sort(v+1,v+n+1);
sol=-inf;
solve(1,n,1,n);
fout<<sol;
return 0;
}