Cod sursa(job #1224037)

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

long long a[NM], mx[NM], dq[NM];
int 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 head,tail;
		
	head=tail=1;
	dq[1] = 1;
	mx[1]=a[1];
	
	for(i=2;i<=N;++i)
	{	
		if(a[dq[head]] != a[i])dq[++head] = i;
		//if(a[dq[head]] * (i - dq[head] +1) > a[dq[tail]] * (i - dq[tail] +1) ) tail = head;
		while(tail < head && a[dq[tail]] * (i-dq[tail]+1) <= a[dq[tail+1]] * (i-dq[tail+1] + 1)) ++ tail;
		mx[i] = a[dq[tail]] * (i-dq[tail]+1);	
	}
	
	for(i=2;i<=N;++i)
	{
		SMAX = max(SMAX, mx[i-1] + a[i]*(N-i+1));
	}
	
	cout << SMAX << '\n';
	
	return 0;
}