题目大意:求一个序列中所有的数差不超过1,求最长的区间。(n<=100000)
本来想到用尺取法,但是发现找出区间的最大最小值需要重新排序。用了循环找TLE。。。(注意set中的multiset可以找到区间的最值)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#include<math.h>
#include<set>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#define LL long long
using namespace std ;
int a[2001000],b[2000000];
int main()
{
int n,m,i,j,k,ma,mi,bi,ba;
while(~scanf("%d",&n))
{
multiset<int >Q;
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
int r=0,l=0,ans=0;
while(r<n)
{
Q.insert(a[r]);
if(*Q.rbegin()-*Q.begin()>1)
{
Q.erase(Q.find(a[l]) );l++;
}
r++;
ans=max(ans,(int)Q.size());
}
printf("%d\n",ans);
}
return 0;
}