题解 P2421 【A-B数对(增强版)】
//其实直接二分就好了
#include<cstdio>
using namespace std;
int m,t,n,i,l,r,mid,w,q,a[5000000];
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
l=i+1;r=n;
while(l<=r)
{
mid=(l+r)/2;
if(a[i]+m<=a[mid])
r=mid-1;
else
l=mid+1;
}
w=l;//找出后面所指定连续数的第一位
l=i+1;r=n;
while(l<=r)
{
mid=(l+r)/2;
if(a[i]+m<a[mid])
r=mid-1;
else
l=mid+1;
}
q=l;//找出后面所指定连续数的末位+1
t+=q-w;//直接减出连续串的长度
}
printf("%d",t);
return 0;
}