P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
分析:
- upper_bound和lower_bound函数
- 在一串从小到大的数组中,upper_bound(a,a+n,x)-a可以找到第一个大于x的元素的索引;lower_bound(a,a+n,x)-a可以找到第一个大于等于x的元素的索引(下标以0开始)
- 将A-B=C变换成A=B+C,遍历数组,用ans+=((upper_bound(a,a+n,a[i]+c)-a)-(lower_bound(a,a+n,a[i]+c)-a));计算出结果
代码:
#include <bits/stdc++.h>
using namespace std;
long long n,c,a[200001],ans;
int main()
{
cin>>n>>c;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
ans+=((upper_bound(a,a+n,a[i]+c)-a)-(lower_bound(a,a+n,a[i]+c)-a));
cout<<ans;
return 0;
}