Approximating a Constant Range
题意:找最长子串,使串中每个元素之间的差值都小于等于1;
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
using namespace std;
const int INF=0x3f3f3f3f;
const int Max=1e5+10;
int a[Max];
int main()
{
int n,ans=0;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
int maxs=0,mins=INF;
int min_pos=0,max_pos=0,k=0;
for(int i=0; i<n;)
{
if(a[i]>=maxs)
{
max_pos=i;
maxs=a[i];
}
if(a[i]<=mins)
{
min_pos=i;
mins=a[i];
}
if(maxs-mins<=1)
{
k++;
i++;
}
else
{
ans=max(ans,k);
k=0;
i=min(min_pos,max_pos)+1;
maxs=0;
mins=INF;
}
}
ans=max(ans,k);
printf("%d",ans);
return 0;
}