★实验任务
YZF 有一个序列 A,由 n 个整数组成。
我们将子段 A 称为 Ai、Ai +1、Ai+ 2、…Aj(1<=i<=j=n)表示 A 的子段。
你的任务是找到 A 的最长的子段,这样就可以从子段最多改变一个数(可改变为任一个整数),使子段严格地增加。
输出找到的最长子段的长度即可。
★数据输入
输入第一行为一个正整数 n
第二行为 n 个数,第 i 个代表 ai。,0<=ai<=1000000000
对于 30%的数据,1<=n<=666;
对于 100%的数据,1<=n<=100086;
★数据输出
输出找到的最长子段的长度即可
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
int i;
int a[100086];
int l[10086]={0};
int num=0;
cin>>a[1];l[num]++;
for(i=2;i<=n;i++)
{
cin>>a[i];
if(a[i]<=a[i-1])
{
num++;
}
l[num]++;//求每段字段长度
}
int sign=0;
int max=0;
for(i=0;i<=num;i++)
{
sign+=l[i];//在数组的位置
if(a[sign+1]-a[sign-1]>=2)// 1 2 7 3 4
{
if(max<l[i]+l[i+1])
{
max=l[i]+l[i+1];
}
}
else if(a[sign+2]-a[sign]>=2)// 1 2 7 6 7
{
if(max<l[i]+l[i+1])
{
max=l[i]+l[i+1];
}
}
else
{
if(max<l[i]+1)
{
max=l[i]+1;//均长
}
}
}
cout<<max;
return 0;
}
标签:子段,int,max,递增,Ai,num,include,最长 From: https://www.cnblogs.com/iceforever7/p/16732328.html