#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int a[N];
int n,c;
struct hh
{
int zheng;
int fu;
int vis;
}tong[150000000];
long long ans;
int main()
{
scanf("%d%d",&n,&c);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>=0) tong[a[i]].zheng++;
else tong[-a[i]].fu++;
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(a[i]>=0 && a[i]-c>=0 && !tong[a[i]].vis) ans=ans+tong[a[i]].zheng*tong[a[i]-c].zheng,tong[a[i]].vis=1;
else if(a[i]>=0 && a[i]-c<0 && !tong[a[i]].vis) ans=ans+tong[a[i]].zheng*tong[a[i]-c].fu,tong[a[i]].vis=1;
else if(a[i]<0 && a[i]-c<0 && !tong[a[i]].vis) ans=ans+tong[a[i]].fu*tong[a[i]-c].fu,tong[a[i]].vis=1;
}
printf("%lld",ans);
}
我的思路就是用桶把那些数存起来并用结构体把负的数存进去,然后再做,但是数的规模太大了,桶存不进去,导致RE了一个点,和WA了两个点,我想请问还有优化的空间吗