Cod sursa(job #1224302)

Utilizator ion824Ion Ureche ion824 Data 30 august 2014 14:28:20
Problema Avioane Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.73 kb
#include<fstream>
#include<algorithm>
using namespace std;
const int NM = 100005;
int a[NM], p[NM];
long long mx[NM];

void rec(int l, int r){
	int i,m = (l+r)>>1;
	
	mx[m] = -1;
	
	for(i=p[l-1];i<=p[r+1];++i)
	{
		if(i > m) break;
		
		if(1LL * (m-i+1) * a[i] > mx[m] || mx[m] < 0)
		{
			mx[m] = 1LL * (m-i+1) * a[i];
			p[m] = i;
		}
	}
	
	if(l <= m-1) rec(l,m-1);
	if(m+1 <= r) rec(m+1,r);
}

int main(){
	ifstream cin("avioane.in");
	ofstream cout("avioane.out");
	int i,N;
	
	cin >> N;
	for(i=1;i<=N;++i) cin >> a[i];
	sort(a+1,a+N+1);
	
	p[N+1] = N;
	rec(1,N);
	
	long long SMAX = 0;
	
	for(i=1;i<=N;++i)
		SMAX = max(SMAX, mx[i-1] + 1LL* a[i] * (N-i+1));

	cout << SMAX << '\n';
	
	return 0;
}