Cod sursa(job #1228493)

Utilizator Marius96Marius Gavrilescu Marius96 Data 14 septembrie 2014 13:41:59
Problema Avioane Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include<cstdio>
#include<algorithm>

long long x;
int n, v[100005], d[100005];

long long calc(int l, int r){
	if(l>r)
		return -1;

	int b = (l+r)/2;
	long long best = 0;
	for(int e = d[l-1]; e <= b && e <= d[r+1]; e++){
		long long cur = 1LL * v[b] * (n-b) + 1LL * v[e] * (b-e);
		if(cur > best)
			best = cur, d[b] = e;
	}

	return std::max(best, std::max(calc(l, b-1), calc(b+1, r)));
}

int main(){
	freopen("avioane.in","r",stdin);
#ifdef INFOARENA
	freopen("avioane.out","w",stdout);
#endif

	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",v+i);
	std::sort(v,v+n);

	d[n] = n;

	printf("%lld", calc(0, n-1));
	return 0;
}