Pagini recente » Cod sursa (job #599654) | Cod sursa (job #1506138) | Cod sursa (job #2490104) | Cod sursa (job #2358349) | Cod sursa (job #586157)
Cod sursa(job #586157)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f,*g;
int n,i,st,dr,j;
struct cp{int x,y,val;} v[100100];
long long pre[100100];
long long s1,s2,mx2,mx1;
/*void caut2(int i, int j,int fn) {
int m;
if (i<=j) {
m=(i+j)/2;
m=v[m].x;
if ( (long long)v[m].val*( fn-m+1)>= (long long) v[m-1].val*(fn-v[m-1].x+1)) {
if (mx2<m) mx2=m;
caut2(v[m].y+1,j,fn);
}
else
caut2(i,m-1,fn);
}
}*/
bool cmp(cp i, cp j) {
return (i.val<j.val);
}
int main() {
f=fopen("avioane.in","r");
g=fopen("avioane.out","w");
fscanf(f,"%d",&n);
for (i=0;i<n;i++)
fscanf(f,"%d",&v[i].val);
sort(v,v+n,cmp);
mx1=-1;
for (i=0;i<n;i=dr+1) {
st=i;
dr=i-1;
for (j=i;v[j].val==v[i].val && j<n;j++,dr++);
for (j=st;j<=dr;j++) {
v[j].x=st;
v[j].y=dr;
}
}
v[n].x=v[n].y=n+100;
mx1=-1;
long long mx=v[0].val;
long long mxv=v[0].val;
long long con=0;
long long x=-1; long long xv=-1,cf;
pre[0]=mx;
for (i=1;i<=n-1;i++) {
con++;
if (con==x && xv!=-1) {
mx=(con)*xv;
mxv=xv;
xv=-1;
x=-1;
}
if (mxv<v[i].val) {
cf=mx / (long long )(v[i].val-mxv);
if (cf==0) {
mx=0;
mxv=(long long )v[i].val;
xv=-1;
x=-1;
}
else
if (x && (x-con==cf) && xv*x<(long long )v[i].val*cf) {
x=cf;
con=0;
xv=(long long )v[i].val;
}
else
if (x==-1 || (x-con)>cf) {
x=cf;
con=0;
xv=(long long )v[i].val;
}
}
mx+=mxv;
pre[i]=mx;
}
mx1=(long long)n*v[0].val;
for (i=0;i<n;i++) {
if ( (long long)pre[i]+v[i+1].val*(n-1-i) >mx1 )
mx1=(long long)pre[i]+v[i+1].val*(n-1-i);
}
/*
for (i=v[0].y;i<n;i=v[i+1].y) {
mx2=-1;
caut2(v[0].y+1,v[i].x-1,v[i].x-1);
if (mx2==-1) {
s2=(long long) (v[i].x)*v[0].val;
}
else {
s2=(long long) v[mx2].val*(v[i].x-mx2);
}
s1=(long long) (n-v[i].x)*v[i].val+s2;
if (s1>mx1) mx1=s1;
}
*/
fprintf(g,"%I64d",mx1);
fclose(g);
return 0;
}