Pagini recente » Cod sursa (job #415898) | Cod sursa (job #3004556) | Cod sursa (job #2483532) | Cod sursa (job #2732927) | Cod sursa (job #1191132)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("avioane.in");
ofstream fout("avioane.out");
const int MAX_N=100100;
long long v[MAX_N];
int d[MAX_N];
int st,dr;
long long cost(int i,int j) {
if(v[i]==v[j]) {
return MAX_N;
}
return (v[j]*j-v[i]*i)/(v[j]-v[i]) + 1;
}
int main() {
int n;
fin>>n;
for(int i=1;i<=n;i++) {
fin>>v[i];
}
sort(v+1,v+n+1);
long long ans=v[1]*n;
d[++dr]=1;
st=1;
for(int t=2;t<=n;t++) {
while(st<dr && cost(d[st],d[st+1])<=t) {
st++;
}
ans=max(ans,(n-t+1)*v[t]+(t-d[st])*v[d[st]]);
if(v[t]==v[d[dr]]) {
continue;
}
while(st<dr && cost(d[dr-1],t)>cost(d[dr],t) ) {
dr--;
}
d[++dr]=t;
}
fout<<ans;
return 0;
}