测试点2,3超时
难道这题纯二分过不了吗
还是我太菜了。。。
#include<bits/stdc++.h>
using namespace std;
int n,k,a[200001],ans;
void find(int tag,int l,int r)
{
int low=l;
int high=r;
if(low>high)return;
int mid=(low+high)/2;
if( a[mid]-a[tag] == k )
{
ans++;
find(tag,mid+1,high);
find(tag,low,mid-1);
}
else if( a[mid]-a[tag] < k )
{
find(tag,mid+1,high);
}
else
{
find(tag,low,mid-1);
}
}
int main(void)
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
find(i,i+1,n);
}
cout<<ans;
return 0;
}