先将所有奶牛的坐标从小到大排序,然后通过双指针(也可以二分)查找第一个超出第\(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;
}