using
System;
public
class
GFG {
static
int
lowerBound(
int
[] a,
int
low,
int
high,
int
element) {
while
(low < high) {
int
middle = low + (high - low) / 2;
if
(element > a[middle])
low = middle + 1;
else
high = middle;
}
return
low;
}
static
int
upperBound(
int
[] a,
int
low,
int
high,
int
element) {
while
(low < high) {
int
middle = low + (high - low) / 2;
if
(a[middle] > element)
high = middle;
else
low = middle + 1;
}
return
low;
}
static
int
countPairSum(
int
[]arr,
int
L,
int
R,
int
N)
{
Array.Sort(arr);
int
right = N - 1, count = 0;
while
(right > 0) {
int
it1 = lowerBound(arr, 0, N, L - arr[right]);
it1++;
int
start = it1 - arr[0];
int
it2 = upperBound(arr, 0, N, R - arr[right]);
int
end = it2 - arr[0];
end = Math.Min(end, right - 1);
if
(end - start >= 0) {
count += (end - start + 1);
}
right--;
}
return
count;
}
public
static
void
Main(String[] args) {
int
[]arr = { 5, 1, 2, 4, 3 };
int
L = 5, R = 8;
int
N = arr.Length;
Console.Write(countPairSum(arr, L, R, N));
}
}