第二和第三个测试点过不去,咋优化
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[200010];
int n,c;
long long ans;
int search(int q)
{
if(q<a[1]) return 0;
int l=1,r=n,mid=(l+r)/2;
while(a[mid]!=q&&l!=r)
{
mid=(l+r)/2;
if(a[mid]>q) r=mid;
if(a[mid]<q) l=mid+1;
}
if(a[mid]!=q) return 0;
int i=mid,j=mid;
while(a[i]==q) i--;
while(a[j]==q) j++;
return j-i-1;
}
int main()
{
cin>>n>>c;
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=n;i>=2;--i)
{
int o=search(a[i]-c);
ans+=o;
}
cout<<ans;
return 0;
}
我试了试,答案都是对的,但时间太长了......