Cod sursa(job #826105)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 30 noiembrie 2012 00:31:29
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

class Nod{
	public : int poz,val;
	public : Nod(int p,int v):poz(p),val(v){}
};

int main(){
	vector<int> a;int n,x;
	freopen("avioane.in","r",stdin);
	freopen("avioane.out","w",stdout);
	
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&x);a.push_back(x);
	}
	
	sort(a.begin(),a.end());
	long long max=0;
	deque<Nod> q;
	
	vector<Nod> bAux;
	for(int i=0;i<a.size();i++){
		if(bAux.empty() || bAux.back().val!=a[i]) bAux.push_back(Nod(i,a[i]));
	}
	for(int i=0;i<bAux.size();i++){
		q.push_back(bAux[i]);
		while(q.size()>=2){
			Nod node = q.front();q.pop_front();
			if(  (bAux[i].poz-node.poz)*node.val <= (bAux[i].poz-q.front().poz)*q.front().val ){
				continue;
			}
			else{
				q.push_front(node);break;
			}
		}
		long long max1=(bAux[i].poz-q.front().poz)*q.front().val + (n-bAux[i].poz)*bAux[i].val;
		if(max1>max) max=max1;
	}	
	
	printf("%lld",max);
		
	return 0;
}