我下载了#3数据,是一个200000 1,然后1e5个1和1e5个2,我算了一下觉得应该是溢出了,但开了long long还是WA 3#,是什么原因?
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
const int N=1e6+10;
unsigned long long n,c,a[N],ans;
unsigned long long b_search(unsigned long long x,unsigned long long f)
{
long long l=0,r=n,mid;
while(l<r)
{
mid=l+r>>1;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
long long tmp=l;
l=0;r=n;
while(l<r)
{
mid=l+r>>1;
if(a[mid]>x) r=mid;
else l=mid+1;
}
if(r>f&&tmp<=f) return r-tmp-1;
return r-tmp;
}
int main()
{
scanf("%d %d",&n,&c);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
a[n]=pow(2,30)+1;
sort(a,a+n);
for(int i=0;i<n;i++) ans+=b_search(a[i]+c,i);
printf("%d",ans);
return 0;
}