Pagini recente » Cod sursa (job #2512876) | Cod sursa (job #2741119) | Cod sursa (job #2024399) | Cod sursa (job #148302) | Cod sursa (job #617554)
Cod sursa(job #617554)
#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;
}