#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,i,j,ans,len,la,flag,lag;
int a[1000005],f[100005][2];
signed main(){
scanf("%lld",&n);
for(i=1;i<=n;i++) scanf("%lld",&a[i]);
for(i=1;i<=n;i++){
if(a[i]>la) la=a[i],len++;
else{
la=a[i],len=1;
if(i<=n) flag=1;
}
ans=max(ans,len);
}
if(flag) ans++;
a[0]=1e9;
for(i=1;i<=n;i++){
if(a[i+1]-a[i-1]>=2 && (a[i]<=a[i-1] || a[i]>=a[i+1])){
int sum1=1,sum2=1;
j=i-1;
while(a[j-1]<a[j]) j--,sum1++;
j=i+1;
while(a[j+1]>a[j]) j++,sum2++;
ans=max(ans,sum1+sum2+1);
}
}
printf("%lld",ans);
return 0;
}
赛时这份代码过了,本以为会超时,但是想了一下枚举更换的点复杂度似乎是正确的?求问一下能不能 hack 掉?