Pagini recente » Cod sursa (job #644300) | Cod sursa (job #1468232) | Cod sursa (job #633246) | Cod sursa (job #1850918) | Cod sursa (job #1520774)
#include <cstdio>
#include <algorithm>
#include <cctype>
#define INF 1000000000000000000LL
#define BUF_SIZE 4096
#define MAXN 100000
int v[MAXN+1], dq[MAXN];
int pos=BUF_SIZE;
char buf[BUF_SIZE];
FILE *fin;
inline char nextch(){
if(pos==BUF_SIZE){
fread(buf, BUF_SIZE, 1, fin);
pos=0;
}
return buf[pos++];
}
inline int read(){
int x=0;
char ch=nextch();
while(!isdigit(ch)){
ch=nextch();
}
while(isdigit(ch)){
x=10*x+ch-'0';
ch=nextch();
}
return x;
}
inline long long timp(int a, int b){
if(v[a]==v[b]){
return INF;
}
return (b*(long long)v[b]-a*(long long)v[a])/(v[b]-v[a])+1;
}
int main(){
int n, i, st, dr;
long long ans;
FILE *fout;
fin=fopen("avioane.in", "r");
fout=fopen("avioane.out", "w");
n=read();
for(i=1; i<=n; i++){
v[i]=read();
}
std::sort(v+1, v+n+1);
ans=v[2]*(long long)(n-1)+v[1];
st=0;
dr=2;
dq[0]=1;
dq[1]=2;
for(i=3; i<=n; i++){
while((dr-st>1)&&(timp(dq[st], dq[st+1])<i)){
st++;
}
while((dr-st>1)&&(timp(dq[dr-2], dq[dr-1])>timp(dq[dr-2], i))){
dr--;
}
dq[dr++]=i;
if(ans<v[i]*(long long)(n-i+1)+v[dq[st]]*(long long)(i-dq[st])){
ans=v[i]*(long long)(n-i+1)+v[dq[st]]*(long long)(i-dq[st]);
}
}
fprintf(fout, "%lld\n", ans);
fclose(fin);
fclose(fout);
return 0;
}