pairs
 
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
 Total Submission(s): 592    Accepted Submission(s): 236
Problem Description
 
n points on the X axis, and their coordinates are (x[i],0),(i=0,1,2,…,n−1). He wants to know how many pairs <a,b> that |x[b]−x[a]|≤k.(a<b)
 
Input
 
 
 T (about 5), indicating the number of cases.
 
 Each test case begins with two integers 
 
 n,k(1≤n≤100000,1≤k≤109).
 
 Next 
 
 n lines contain an integer 
 
 x[i](−109≤x[i]≤109), means the X coordinates.
 
Output
 
<a,b> that |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
 
Source
 
BestCoder Round #31
 
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 100005
int x[N];
int main()
{
int t,n,k,i,left,right,mid;
long long ans;
// freopen("text.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
scanf("%d",&x[i]);
sort(x,x+n);
ans=0;
for(i=0;i<n;i++)
{
left=i+1;
right=n-1;
while(left<=right)
{
mid=(left+right)/2;
if(x[mid]-x[i]>k)
right=mid-1;
else
left=mid+1;
}
ans+=right-i;
}
printf("%I64d\n",ans);
}
return 0;
}
 









