题解:P12241 [蓝桥杯 2023 国 C] 最大区间
竟然没有人用悬线法。
思路:
我们可以假设以某一个
悬线法:
定义
如果当前
如果当前
如果当前
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+5;
int n,ans;
long long a[N],l[N],r[N];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
l[i]=r[i]=i;
}
for(int i=1;i<=n;i++)
while(l[i]>1&&a[i]<=a[l[i]-1])l[i]=l[l[i]-1];
for(int i=n;i>=1;i--)
while(r[i]<n&&a[i]<=a[r[i]+1])r[i]=r[r[i]+1];
for(int i=1;i<=n;i++)
if((r[i]-l[i]+1)*a[i]>ans)
ans=(r[i]-l[i]+1)*a[i];
cout<<ans;
return 0;
}