[ABC336D] Pyramid - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+20;
int n,a[N];
int pre[N]; //第i个数字作为中心,能组成最长前半段的长度
int nxt[N]; //第i个数字作为中心,能组成最长后半段的长度
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
int k=n;
/*枚举每个位置左边最长长度,右边最长长度,取min*/
// 1 2 3 2 3 4
// 1 2 3 2 3 4 pre[i]
// 1 2 3 2 2 1 nxt[i]
for(int i=1;i<=n;i++)
{
pre[i]=min(pre[i-1]+1,a[i]);
}
for(int i=n;i>0;i--)
{
nxt[i]=min(nxt[i+1]+1,a[i]);
}
int ans=0;
for(int i=1;i<=n;i++) ans=max(ans,min(pre[i],nxt[i]));
cout<<ans;
}