John has nn points on the X axis, and their coordinates are (x[i],0),(i=0,1,2,…,n−1)(x[i],0),(i=0,1,2,…,n−1). He wants to know how many pairs<a,b><a,b> that |x[b]−x[a]|≤k.(a<b)|x[b]−x[a]|≤k.(a<b)
Input
The first line contains a single integer TT (about 5), indicating the number of cases.
Each test case begins with two integers n,k(1≤n≤100000,1≤k≤109)n,k(1≤n≤100000,1≤k≤109).
Next nn lines contain an integer x[i](−109≤x[i]≤109)x[i](−109≤x[i]≤109), means the X coordinates.
Output
For each case, output an integer means how many pairs<a,b><a,b> that |x[b]−x[a]|≤k|x[b]−x[a]|≤k.
Sample Input
2
5 5
-100
0
100
101
102
5 300
-100
0
100
101
102
Sample Output
3
10
注意ll型并且输入要用scanf,cin的话卡着时间过的,scanf快了好多
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005];
int main()
{
ll t;
ll i,j;
scanf("%lld",&t);
while(t--)
{
ll n,k;
scanf("%lld%lld",&n,&k);
for(i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
ll ans=0;
for(i=0,j=0;i<n;i++){
while(a[j+1]-a[i]<=k && j+1<n)//每次从当前的i位置开始向后找
j++;
ans+=j-i;
}
// for(i=0;i<n;i++){
// int pos=i;
// for(j=pos;a[j+1]-a[i]<=k && j<n-1;j++)
// {}
// ans+=j-i;
//} 不知道为什么换成for之后一直超时。。。
cout<<ans<<endl;
}
return 0;
}