import java.util.;
import java.io.;
public class Main{
public static int getNum(int []arr,int num){
if(arr==null||arr.length==0||num<0){
return 0;
}
LinkedList<integer> qmin= new LinkedList<integer>();
LinkedList<integer> qmax= new LinkedList<integer>();
int i=0;
int j=0;
int res=0;</integer></integer></integer></integer>
while(i<arr.length){
while(j<arr.length){
//到j不满足条件,所以[i+1..j]不一定满足条件
//保证qmin尾部为j位置
if(qmin.isEmpty()||qmin.peekLast()!=j){
//qmin尾部对应元素比arr[j]大,更换qmin
//必须保证qmin队尾最小
while(!qmin.isEmpty()&&arr[qmin.peekLast()]>=arr[j]){
qmin.pollLast();
}
qmin.addLast(j);
//必须保证qmax的队尾最大
while(!qmax.isEmpty()&&arr[qmax.peekLast()]<=arr[j]){
qmax.pollLast();
}
qmax.addLast(j);
}
//qmax的最小值 - qmin的最大值
if(arr[qmax.getFirst()]-arr[qmin.getFirst()]>num){
break;
}
j++;
}
res+=j-i;
//开头i要自增,应该把队列中的i移除,只可能在最大和最小地方出现,要不就提前被弹出了
if(qmin.peekFirst()==i){
qmin.pollFirst();
}
if(qmax.peekFirst()==i){
qmax.pollFirst();
}
i++;
}
return res;
//getNum结束
}
public static void main(String[] args)throws IOException {
BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
int n,num;
String[] line1 = in.readLine().split(" ");
n=Integer.parseInt(line1[0]);
num=Integer.parseInt(line1[1]);
String[] arr = in.readLine().split(" ");
int []data=new int[n];
for(int i=0;i<n;i++){
data[i]=Integer.parseInt(arr[i]);
}
int result =getNum(data,num);
System.out.println(result);
}}

京公网安备 11010502036488号