Pagini recente » Cod sursa (job #699404) | cristi_62200 | Cod sursa (job #464203) | Cod sursa (job #3209655) | Cod sursa (job #1413422)
#include <cstdio>
#include <algorithm>
FILE* in=fopen("avioane.in","r");
FILE* out=fopen("avioane.out","w");
const int Q=100100;
int v[Q];
int n;
int deq[Q];
int t[Q];
int nr;
long long timp(int a, int b)
{
long long aux1,aux2;
aux1=1LL*(b-a)*v[a];
aux2=1LL*(v[b]-v[a]);
return b+aux1/aux2;
}
int main()
{
fscanf(in,"%d",&n);
for(int i=1; i<=n; i++)
{
fscanf(in,"%d",&v[i]);
}
std::sort(v+1,v+n+1);
int act;
int st,dr;
st=1;
dr=1;
deq[1]=1;
t[1]=v[1];
long long rez=0;
for(int i=2; i<=n; i++)
{
if(v[i]==v[i-1])
continue;
while(st<dr && t[deq[st+1]]<=i)
st++;
t[deq[st]]=i;
while(dr>st && timp(deq[dr],i) < t[deq[dr]])
{
dr--;
}
t[i]=timp(deq[dr],i);
deq[++dr]=i;
if(rez< 1LL*v[ deq[st] ]*(i-deq[st])+1LL*(n-i+1)*v[i])
rez=1LL*v[ deq[st] ]*(i-deq[st])+1LL*(n-i+1)*v[i];
}
fprintf(out,"%lld\n",rez);
return 0;
}