Pagini recente » Cod sursa (job #419242) | Cod sursa (job #2693682) | Cod sursa (job #535033) | Cod sursa (job #674581) | Cod sursa (job #617556)
Cod sursa(job #617556)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
#define nmax 100100;
int v[100100],l[100100],cni,i,j,n;
long long r[100100],cn;
/*void divide(int st,int dr) {
int m;
long long cn;
if (st<=dr) {
m=(st+dr)/2;
r[m]=-1;
for (j=l[st-1];j<=l[dr+1] && j<=m;j++) {
cn=(long long)(m-j+1)*v[j];
if (cn>r[m]) {
r[m]=cn;
l[m]=j;
}
}
divide(st,m-1);
divide(m+1,dr);
}
}
*/
int main() {
f=fopen("avioane.in","r");
g=fopen("avioane.out","w");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
sort(v+1,v+n+1);
l[1]=1;
r[1]=v[1];
l[n+1]=n;
//divide(1,n);
for (i=2;i<=n;i++) {
for (j=l[i-1],cn=-1;j<=i;j++)
if (cn<(long long)(i-j+1)*v[j]) {
cn=(long long)(i-j+1)*v[j];
cni=j;
}
l[i]=cni;
r[i]=cn;
}
long long sol = 0;
for(int i = 2; i <= n; i++) {
long long x = (long long ) (n - i + 1) * v[i] + r[i - 1];
if(x > sol) {
sol = x;
}
}
fprintf(g,"%lld",sol);
fclose(g);
return 0;
}