Pagini recente » Cod sursa (job #1900716) | Cod sursa (job #514325) | Cod sursa (job #2481778) | Cod sursa (job #6140) | Cod sursa (job #1624595)
#include <cstdio>
#include<algorithm>
using namespace std;
long long k,mx=0,i,j,n,v[200001],s[200001],d[200001];
int main()
{
freopen("strabunica.in","r",stdin);
freopen("strabunica.out","w",stdout);
scanf("%lld",&n);
for(i=1;i<=n;i++)
scanf("%lld",&v[i]);
for(i=2;i<=n;i++)
if(v[i]>v[i-1])s[i]=i-1;
else if(v[i]==v[i-1])s[i]=s[i-1];
else
{
k=s[i-1];
while(v[k]>=v[i]&&k>0)
k=s[k];
s[i]=k;
}
d[n]=n+1;
for(i=n-1;i>=1;i--)
if(v[i]>v[i+1])d[i]=i+1;
else if(v[i]==v[i+1])d[i]=d[i+1];
else
{
k=s[i+1];
while(v[k]>=v[i]&&k<n+1)
k=d[k];
if(k==0)k=n+1;
d[i]=k;
}
/*for(i=2;i<=n;i++)
if(v[i]>v[i-1])s[i]=i-1;
else if(v[i]==v[i-1])
s[i]=s[i-1];
else if(v[i]>s[i-1])
s[i]=s[i-1];
else if(v[i]==s[i-1])
s[i]=s[s[i-1]];
else if(v[i]<s[i-1])
{
k=s[i-1];
while(v[i]<=v[k])
k=s[k];
s[i]=k;
}
d[n]=n+1;
for(i=n-1;i>=1;i--)
{
if(v[i]>v[i+1])d[i]=i+1;
else if(v[i]==v[i+1])
d[i]=d[i+1];
else if(v[i]>d[i+1])
d[i]=d[i+1];
else if(v[i]==d[i+1])
d[i]=d[d[i+1]];
else if(v[i]<d[i+1])
{
k=d[i+1];
while(v[i]<=v[k]&&k<n+1)
k=d[k];
d[i]=k;
}
}*/
for(i=1;i<=n;i++)
if((abs(s[i]-d[i])-2)*v[i]>mx)mx=(abs(s[i]-d[i])-2)*v[i];
printf("%lld\n",mx);
return 0;
}