先将所有奶牛的坐标从小到大排序,然后通过双指针(也可以二分)查找第一个超出第(i)头奶牛交流范围(d)的奶牛的坐标(r),同时答案累加上(r-i-1)(和第(i)头奶牛范围不超过(d)的奶牛数,减一是除去第(i)头奶牛自身)。
const int N=1e6+10;
int a[N];
int n,d;
int main()
{
cin>>n>>d;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int res=0;
int r=0;
for(int i=0;i<n;i++)
{
while(r<n && a[r]-a[i] <= d)
r++;
res+=r-i-1;
}
cout<<res<<endl;
//system("pause");
return 0;
}