其他节点都顺利通过,第三个节点出现了问题,不知道该如何修改。 使用二分法来做的这道题
#include <iostream>
#include <algorithm>
using namespace std;
const int N=200000+10;
int num[N];
int n,c;
int ac,ap;
int bi(int n,int l,int r)
{
if(l>=r)
{
if(num[l]==n) return l;
else return -1;
}
else
{
int mid=(l+r)/2;
if(num[mid]<n) bi(n,mid+1,r);
else bi(n,l,mid);
}
}
int count(int n,int loc)
{
int res=0;
while(num[loc++]==n) res++;
return res;
}
int main() {
long long res=0;
cin>>n>>c;
for(int i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
sort(num,num+n);
for(int i=0;i<=n;i+=ac)
{
int tmp;
tmp=bi(num[i]+c,i,n-1);
ac=count(num[i],i);
if(tmp!=-1)
{
ap=count(num[i]+c,tmp);
res+=ac*ap;
}
else continue;
}
cout<<res;
return 0;
}