Pagini recente » Cod sursa (job #1152200) | Cod sursa (job #1604144) | Cod sursa (job #1769368) | Cod sursa (job #383285) | Cod sursa (job #826105)
Cod sursa(job #826105)
#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;
}