Cod sursa(job #634890)

Utilizator loginLogin Iustin Anca login Data 17 noiembrie 2011 20:11:28
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
# include <iostream>
# include <fstream>
# include <algorithm>
# define DIM 100003
# define INF 2000000000
# define max(a,b) (a>b?a:b)
using namespace std;
int n, w[DIM], v[DIM], sol=-INF, p[DIM], m, ap[DIM], a[DIM];

void read ()
{
	ifstream fin ("avioane.in");
	fin>>n;
	for(int i=1;i<=n;++i)
		fin>>w[i];
	sort(w+1,w+n+1);
	for (int i=1;i<=n;++i)
		if (w[i]!=w[i-1])
			ap[m]=ap[m-1]+a[m], v[++m]=w[i], a[m]=1;
		else
			++a[m];
}

void solve ()
{
	int q=0;
	for (int i=1;i<=m;++i)
	{
		while (q<i && (ap[i-1]-ap[q-1])*v[q]<=(ap[i-1]-ap[q])*v[q+1])
			++q;
		sol=(max(sol,(ap[i-1]-ap[q-1])*v[q]+(n-ap[i-1])*v[i]));
	}
}

int main ()
{
	read ();
	solve ();
	ofstream fout ("avioane.out");
	fout<<sol;
	return 0;
}