Pagini recente » Cod sursa (job #2442826) | Cod sursa (job #1102023) | Cod sursa (job #2379061) | Cod sursa (job #2445913) | Cod sursa (job #720609)
Cod sursa(job #720609)
#include <fstream>
#include <algorithm>
using namespace std;
#define Nmax 100011
ifstream F("avioane.in");
ofstream G("avioane.out");
int A[Nmax],N;
int Min,Max;
int Minv,Maxv;
int Sum;
inline int f(int x,int y)
{ return A[x]*(y-x)+A[y]*(N-y+1); }
int place_max(int st,int dr)
{
if (st==dr)
return st;
if (dr-st==1)
return ( f(Min,dr)-f(Min,st) ) ? dr : st ;
int mid=(st+dr)/2;
int x=place_max(mid,dr);
int y=place_max(st,mid);
return f(Min,x)-f(Min,y) ? x : y ;
}
int place_min(int st,int dr)
{
if (st==dr)
return st;
if (dr-st==1)
return ( f(dr,Max)-f(st,Max) ) ? dr : st ;
int mid=(st+dr)/2;
int x=place_max(mid,dr);
int y=place_max(st,mid);
return f(x,Max)-f(y,Max) ? x : y ;
}
int main()
{
F>>N;
for (int i=1;i<=N;++i)
F>>A[i];
sort(A,A+N+1);
for (int i=1;i<=N;++i)
{
Min=i;
Sum=max(Sum,f(i,place_max(i,N)));
}
for (int i=1;i<=N;++i)
{
Max=i;
Sum=max(Sum,f(place_min(1,i),i));
}
G<<Sum<<'\n';
F.close();
G.close();
return 0;
}