#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000005],id1[1000005],id2[1000005];
int main()
{
int i,j,n,m,k;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int first1=0,last1=0,first2=0,last2=0;
int ans=0,now=0;
for(i=0;i<n;i++)
{
while(first1<last1&&a[id1[last1-1]]>a[i]) last1--;id1[last1++]=i;
while(first2<last2&&a[id2[last2-1]]<a[i]) last2--;id2[last2++]=i;
while(first1<last1&&first2<last2&&(a[id2[first2]]-a[id1[first1]]>k))
{
if(id1[first1]<id2[first2]) {now=id1[first1]+1;first1++;}
else {now=id2[first2]+1;first2++;}
//printf("mm\n");
}
if(a[id2[first2]]-a[id1[first1]]<=k&&a[id2[first2]]-a[id1[first1]]>=m)
ans=max(ans,i-now+1);
}
printf("%d\n",ans);
}
return 0;
}
HDU 3530 Subsequence
最新推荐文章于 2019-11-19 21:01:08 发布