#include<stdio.h>
int main(void)
{
long int n;
scanf("%ld",&n);
if(n==1) //处理只有一个数的特殊情况
{
printf("1");
exit(0);
}
long int a[n];
for(int i=0;i<n;i++)//将输入的数列存入数组a[]
{
scanf("%ld",&a[i]);
}
long int b[n-1]; //b数组用于记录a数组中相邻两个元素的相对大小关系
for(int i=0;i<n;i++)//之后考察b中元素时,只关心正负
{
b[i]=a[i+1]-a[i];
}
long int ans;
for(long int i=0;i<n-1;i++)
{
if(b[i]==b[i+1]&&b[i]==b[i+2])//处理一上来就遇到三个相等元素的情况
{ //这种情况,按照题意,结果为2
ans=2;
continue;
}
int flag=0;
long int cnt=0;
for(long int j=i;j<n-1;j++)
{
if(b[j]<=0) flag++;
if(flag==2) break; //flag=2,即b数组中出现了两个负数
cnt++; //即a数组中出现了先大再小再大再小的情况,
} /*此时可以终止此次遍历,因为到此为止已经无法满足
只改变一个元素就严格递增的要求了*/
cnt++; //cnt为本次遍历得到的最长子列的长度,cnt的值随着i的循环不断更新
ans=ans>cnt?ans:cnt;//还要和三个数相等的情况比较一下,确定最终结果
}
printf("%ld",ans);
return 0;
}
全部评论
(0) 回帖