Cod sursa(job #1228925)

Utilizator tibi9876Marin Tiberiu tibi9876 Data 15 septembrie 2014 20:35:03
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<fstream>
#include<algorithm>
using namespace std;

long long a[100005],s[100005],i,x,n,mx,sol;

void calc(int x,int y)
{
	if (y-x<2)
		return;
	long long i,m,p,mx=0;
	m=(x+y)/2;
	for (i=s[x];i<=s[y];i++)
		if ((n-i+1)*(a[i]-a[m])>mx)
		{
			mx=(n-i+1)*(a[i]-a[m]);
			p=i;
		}
	s[m]=p;
	if (mx+a[m]*(n-m+1)>sol)
		sol=mx+a[m]*(n-m+1);
	calc(x,m);
	calc(m,y);
}
	
		
int main()
{
	ifstream f("avioane.in");
	ofstream g("avioane.out");
	f >> n;
	for (i=1;i<=n;i++)
		f >> a[i];
	sort(a+1,a+n+1);
	for (i=1;i<=n;i++)
		if ((n-i+1)*(a[i]-a[1])>mx)
		{
			mx=(n-i+1)*(a[i]-a[1]);
			x=i;
		}
	sol=mx+a[1]*n;
	s[1]=x;
	s[n]=n;
	calc(1,n);
	g << sol;
}