做法假吗?(勿喷)
#include<cstdio>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cctype>
#define ri register int
using std::stack;
using std::min;
using std::max;
int n;
int a[1000009],r[1000009];
stack<int> s;
signed main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
if(n==1)return printf("%d\n",a[1]) & 0;
if(n==2)return printf("%d\n",max(min(a[1],a[2])*3,min(a[1]*1,a[2]*2))) & 0;
s=stack<int>();
for(int i=n;i>=1;i--)
{
while(!s.empty()&&a[s.top()]>=a[i]) s.pop();
r[i]=s.empty()?n+1:s.top();
s.push(i);
}
long long ans=-1919810000LL;
for(int i=1;i<=n;i++)
{
ans=max(ans,(1ll*a[i]*(r[i]-1+i-((r[i]==i+1)?1:0))));
}
for(int i=1;i<=n;i++)ans=max(ans,1ll*a[i]*i);
//for(int i=1;i<=n;i++)printf("%d %lld %lld\n",r[i],(1ll*a[i]*(r[i]-1+i-((r[i]==i+1)?1:0))),1ll*a[i]*i);
printf("%lld",ans);
}