链接:
https://codeforces.com/problemset/problem/1538/C
题意:
题目给一个有n个整数的数组,求在该数组里,有多少对整数满足 l≤ai+aj≤r
本题只要先将数组排序,再将计算每一个整数ai,从a0到ai,第一个大于r-arr[i]的下标,让其减去第一个大于等于l-arr[i]的下标值,就是以整数ai为left,和整数ai配对的整数个数。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
ll arr[200003];
int main() {
int T;
cin >> T;
while (T--) {
ll n, l, r;
cin >> n >> l >> r;
ll sum = 0;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
sum += (upper_bound(arr, arr + i, r - arr[i]) - lower_bound(arr , arr + i, l - arr[i]));
}
cout << sum;
cout << endl;
}
return 0;
}