题解 P7291 【「EZEC-5」人赢 加强版】

· · 题解

官方题解

#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;

const int M=1e7+10;
int n,a[M],ans;

#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
inline int read()
{
    char c=getchar();int x=0;bool f=0;
    for(;!isdigit(c);c=getchar())f^=!(c^45);
    for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
    if(f)x=-x;return x;
}

int f(int x,int y)
{
    return (x+y)*min(a[x],a[y]);
}

signed main()
{
    n=read();
    for (int i=1;i<=n;i++)a[i]=read(),ans=max(ans,a[i]*i);
    for (int i=n-1,l=n;i>=1;i--)
    {
        ans=max(ans,f(i,l));
        if (a[i]>a[l])l=i;
    }
    cout<<ans;
    return 0;
}