★实验任务 有一个长度为 n 的序列,第 i 个的数为 a[i]。我们定义如果它的一个连续的 子串为“没有进行过干净的交易”,那么这个子串的最大值与最小值之差在[m,k] 中。 现在,你的任务是找到一条最长的“没有进行过干净的交易”的子串。
★数据输入
第一行输入三个正整数 n m k (0< n <=10000),m(0 =< m =< k =< n)。 接下去一行有 n 个正整数,第 i 个数表示 a[i]的值。
★数据输出
输出一个数,表示这个子串的长度。
输入示例
5 0 0
1 1 1 1 1
输出示例
5
输入示例
6 0 3
3 1 2 3 4 5
输出示例
5
/*
* clean.cpp
*
* Created on: 2016年9月30日
* Author: 221500423 CJDM66
*/
#include<iostream>
#define NUM 10002
using namespace std;
int a[NUM]={NUM};
int main(void){
int n,m,k,max,min,i,ii,count,ans=0;
cin>>n>>m>>k;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
count=0;
min=a[i];
max=a[i];
for(ii=i-1;ii>=0;ii--){
if(a[ii]<=max){
count++;
if(max-a[ii]>k){
count--;
break;
}
if(a[ii]<min){
min=a[ii];
}
}
else break;
}
for(ii=i+1;ii<=n;ii++){
if(a[ii]<=max){
count++;
if(max-a[ii]>k){
count--;
break;
}
if(a[ii]<min){
min=a[ii];
}
}
else break;
}
count++;
if((max-min>=m)&&(max-min<=k)&&(ans<count)){
ans=count;
}
}
cout<<ans;
return 0;
}