Cod sursa(job #1223860)

Utilizator ion824Ion Ureche ion824 Data 29 august 2014 00:29:27
Problema Avioane Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<fstream>
#include<algorithm>
using namespace std;
const int NM = 100005;

int a[NM], N;

int main(){
	ifstream cin("avioane.in");
	ofstream cout("avioane.out");
	int i;
	
	cin >> N;
	for(i=1;i<=N;++i) cin >> a[i];
	sort(a+1,a+N+1);
	
	long long SMAX = 1LL * a[1] * N, Sum = 0;
	int l,r,mid1,mid2;
	
	if(N>1) SMAX = max(SMAX, 1LL * a[2] * (N-1) + a[1]);
	if(N>2) SMAX = max(SMAX, max(1LL * a[3] * (N-2) + a[2], 1LL * a[3] * (N-2) + 2LL * a[1]) );  
	
	for(i=N;i>3;--i)
	{
		Sum = 1LL * (N-i+1) * a[i];
		
		l = 1; r = i-1;
		
		while(r - l > 2)
		{
			mid1 = (l+l+r) / 3;
			mid2 = (l+r+r) / 3;
			if(1LL * a[mid1] * (i - mid1) <= 1LL * a[mid2] * (i-mid2)) l = mid1;
			  else r = mid2;		
		}
		
		if(1LL * a[l] * (i - l) <= 1LL * a[l+1] * (i-l-1)) l++;
		if(1LL * a[l] * (i - l) <= 1LL * a[r] * (i-r)) l = r;
		
		SMAX = max(SMAX, Sum + 1LL * a[l] * (i-l));	
	}
	
	cout << SMAX << '\n';
	
	return 0;
}