Cod sursa(job #720607)

Utilizator danalex97Dan H Alexandru danalex97 Data 22 martie 2012 19:39:51
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#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 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)
		Sum=max(Sum,f(i,place_max(i,N)));

	G<<Sum<<'\n';
	
	F.close();
	G.close();
	return 0;
}