#include<bits/stdc++.h>#define M 1000005using namespace std;int a,n,m,k,i,p[M],mintail,minhead,maxtail,maxhead,ans,trmp;struct PP{ int viluee; int markee;}maxque[M],minque[M];int main(){ while(~scanf("%d%d%d",&n,&m,&k)) { ans=0; maxhead=0;maxtail=0;minhead=0;mintail=0;memset(minque,0,sizeof(minque));memset(maxque,0,sizeof(maxque)); for(i=1;i<=n;i++) scanf("%d",&p[i]); for(i=1;i<=n;i++) { while(maxhead<=maxtail&&maxque[maxtail].viluee<p[i]) maxtail--; maxque[++maxtail].viluee=p[i];maxque[maxtail].markee=i; if(i==1) minque[0].viluee=p[i],minque[0].markee=i; while(minhead<=mintail&&minque[mintail].viluee>p[i]) mintail--; minque[++mintail].viluee=p[i];minque[mintail].markee=i; while(maxque[maxhead].viluee-minque[minhead].viluee>k) { if(maxque[maxhead].markee<=minque[minhead].markee) maxhead++; else minhead++; } if(maxque[maxhead].viluee-minque[minhead].viluee>=m) { if(maxque[maxhead].markee<=minque[minhead].markee) trmp=minque[minhead].markee; else trmp=maxque[maxhead].markee; if(ans<i-trmp) ans=i-trmp; } } printf("%d\n",ans); } return 0;}
转载于:https://www.cnblogs.com/Lamboofhome/p/11509108.html
相关资源:JAVA上百实例源码以及开源项目