#include<cstdio>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<map>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;//注意数据范围要用long long
const int maxn=1e6+5;
int a[maxn];
int main()
{
ll t;
cin>>t;
ll n,k;
while(t--)
{
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);//对数据从大到小排序
ll i=0,j=1,sum=0;//定义i,j两个变量,一个表示从下标为0处开始,一个从下标为1处开始,
while(j<n)//当运行到j的值到最后位置,即n-1后结束
{
if(a[j]-a[i]>k)当a[j]-a[i]大于k,即此时范围过大,i的值+1,数据向前移动
i++;
else//若满足条件,则把满足条件的区段的段数加起来,也就是j-i,并继续扩大范围,j++
{
sum+=j-i;
j++;
}
}
cout<<sum<<endl;
}
return 0;
}
C - pairs(尺取法)
最新推荐文章于 2024-09-02 23:09:18 发布