Cod sursa(job #588932)

Utilizator test9cosmin Macovei test9 Data 10 mai 2011 09:30:33
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
# include <fstream>
# include <algorithm>
using namespace std;

std :: ifstream f ("avioane.in");
std :: ofstream g ("avioane.out");

int n, i, a[100010], p[100010];
long long S, sol[100010];

void calc (int st, int dr){
	int m = (st + dr) >> 1, i;
	sol[m] = -2;
	for (i = p[st - 1]; i <= p[dr + 1]; ++i){
		if (i > m) break ;
		long long val = (long long)(m - i + 1) * a[i];
		if (val > sol[m])
			sol[m] = val, p[m] = i;
	}
	if (m - 1 >= st) calc (st, m - 1);
	if (m + 1 <= dr) calc (m + 1, dr);
}

int main (){
	f >> n;
	
	for (i = 1; i <= n; ++i)
		f >> a[i];
	
	sort (a + 1, a + n + 1);
	
	p[n + 1] = n;
	
	calc (1, n);
	
	for (i = 2; i <= n; ++i){
		long long val = sol[i - 1] + a[i] * (long long)(n - i + 1);
		if (val > S) S = val;
	}
	
	g << S << '\n';
	
	g.close ();
	
	return 0;
}