題目鏈接:https://www.luogu.org/problem/P2422
AC代碼:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
const int maxn=1e5+10;
ll a[maxn];
ll sum[maxn];
ll cnt[maxn];
int que[maxn];//用數組模擬單調隊列
int main()
{
cin>>n;
a[0]=0;
sum[0]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
cnt[i]=0;
sum[i]=sum[i-1]+a[i];
}
int r=0;
que[++r]=0;
ll ans=0;
for(int i=1;i<=n;i++){
while(a[que[r]]>a[i]){//維護單調區間的最小值
cnt[que[r]]+=sum[i-1]-sum[que[r]];//cnt[]加上後半段滿足的區間值
r--;
}
cnt[i]+=sum[i]-sum[que[r]];//cnt[]加上前半段滿足的區間值
que[++r]=i;
}
for(int i=1;i<=n;i++){
ans=max(ans,cnt[i]*a[i]);
}
cout<<ans<<endl;
return 0;
}
我一定可以的!!!