我自己测试的输出和洛谷的输出是一样的
#include<iostream>
#include<algorithm>
using namespace std;
int find(int aim,int a[],int n){
int l=0,r=n-1;
int mid,jud=0;
int ans=0;
while(l<r){
mid=(l+r)/2;
if(a[mid]==aim){
ans++;
jud=1;
break;
}
else if(a[mid]>aim){
r=mid;
}
else{
l=mid+1;
}
}
if(jud==1){
int j=mid;
while(a[j+1]==aim){
ans++;
j++;
}
j=mid;
while(a[j-1]==aim){
ans++;
j--;
}
}
return ans;
}
int main(){
int n,c;
long long ans=0;
cin>>n>>c;
int a[200005];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
int aim=a[i]-c;
int now=find(aim,a,n);
ans+=now;
while(a[i+1]==a[i]){
ans+=now;
i++;
}
}
cout<<ans;
return 0;
}