Pagini recente » Cod sursa (job #523123) | Cod sursa (job #612013) | Cod sursa (job #2644471) | Cod sursa (job #290309) | Cod sursa (job #585698)
Cod sursa(job #585698)
#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 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;
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,"%lld",mx1);
fclose(g);
return 0;
}