感觉挺难的
搞了两个数组,分别存 从左向右,递增序列的长度;从右向左,递减序列的长度
#include<iostream>
#include<cstdio>
using namespace std;
int a[100001],l[100001],r[100001];
int n,ans;
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
l[1]=1;
for (int i=2; i<=n; i++)
if (a[i]>a[i-1]) l[i] = l[i-1] + 1;
else l[i]=1;
r[n]=1;
for (int j=n-1; j>=1; j--)
if (a[j]<a[j+1]) r[j]=r[j+1]+1;
else r[j]=1;
for (int i=2; i<n; i++)
{
if (a[i-1]+2<=a[i+1])
ans=max(ans,l[i-1]+r[i+1]+1);// 改变 i
ans=max(ans,r[i]+1);// 改变 i-1
ans=max(ans,l[i]+1);// 改变 i+1
}
cout<<ans;
}