链接:https://codeforces.ml/problemset/problem/1538/C
题意:找到满足这个条件的数有几对:l≤ai+aj≤r;
题解:
排序后,用lower_bound和upper_bound找到边界,然后中间的就都是;具体看代码;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[200005];
int main()
{
int t;
cin >> t;
while (t--)
{
int n, l, r;
cin >> n >> l >> r;
memset(num, 0, sizeof(num));
for (int i = 0; i < n; i++)
{
cin >> num[i];
}
sort(num, num + n);
ll ans = 0;
for (int x = 0; x < n; x++)
{
int ll = l - num[x];
int rr = r - num[x];
int lpos = lower_bound(num + x + 1, num + n, ll) - num;
int rpos = upper_bound(num + x + 1, num + n, rr) - num;
ans += rpos - lpos;
}
cout << ans << endl;
}
}