#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N],n,c;
bool check(int k,int t)
{
if(a[k]<t)return true;
return false;
}
bool check2(int k,int t)
{
if(a[k]==t)return true;
return false;
}
int find(int t)
{
int l=1,r=n;
while(l<r)
{
int mid=(l+r)>>1;
if(check(mid,t))l=mid+1;
else r=mid;
}
if(l==n&&!check2(l,t))return 0;
return l;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>c;int cnt=0;
for(int i=1;i<=n;i++)cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
int x=find(a[i]+c);
int y=x;
for(;y<=n;y++)if(a[y]!=a[i]+c)break;
if(y!=0)y--;
if(x==0&&y==0)continue;
cnt+=(y-x+1);
}
cout<<cnt;
return 0;
}
怎么二分求右端点?