会爆int
/* 给定数轴上一些点对,问有多少点对之间的距离差不超过k 点对排序后尺取法:枚举每个左边界,找到一个右边界使得 */ #include<bits/stdc++.h> #define maxn 100005 using namespace std; int n,k,sum,l,r,x[maxn]; long long ans; int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&x[i]); sort(x+1,x+1+n); l=r=sum=1;ans=0; for(l=1;l<=n;l++){ while(x[r]-x[l]<=k && r<=n) r++; ans+=r-l-1; } printf("%lld\n",ans); } return 0; }
原文:https://www.cnblogs.com/zsben991126/p/10158950.html