A 最长区间长度
给定一个n个数据的序列a1,...,an。连续数据之间没有大的跳跃 即对于每个1≤i <n,保证| ai + 1 - ai | ≤ 1。
如果该区间范围内的最大值和最小值之间的差最大为1,则[L,R]范围内的数据被认为是恒定的。即令M为[L,R]范围内的最大值,m为[L,R]范围内的最小值,如果M - m≤1,则范围[l,r]为恒定的。
找出最长的恒定范围的长度。
输入:
输入的第一行包含一个整数n(2≤n≤100000)
第二行包含n个整数a1,a2,...,an(1≤ai≤100000)。
输出:
输出一个数字 - 给定序列的恒定范围的最大长度。
示例
输入:
5
1 2 3 3 2
输出
4
输入
11
5 4 5 5 6 7 8 8 8 7 6
输出
5
样例解释:
在第一个样例中,最长的恒定的范围是[2,5],其长度是4。
在第二个样例中,有三个长度为4的恒定范围:[1,4],[6,9]和[7,10];最大长度5的恒定范围是[6,10]。
以下为老师的代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int p[N];
int main(){
int n,x,ans=0,l=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
l=max(l,p[x-2]);
l=max(l,p[x+2]);
ans=max(ans,i-l);
p[x]=i;
}
printf("%d\n",ans);
return 0;
}
using namespace std;
const int N=1e5+10;
int p[N];
int main(){
int n,x,ans=0,l=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&x);
l=max(l,p[x-2]);
l=max(l,p[x+2]);
ans=max(ans,i-l);
p[x]=i;
}
printf("%d\n",ans);
return 0;
}
膜拜大佬!@!@@@@