<script>
function
upper_bound(arr, N, X) {
let mid;
let low = 0;
let high = arr.length;
while
(low < high) {
mid = low + (high - low) / 2;
if
(X >= arr[mid]) {
low = mid + 1;
}
else
{
high = mid;
}
}
if
(low < N && arr[low] <= X) {
low++;
}
return
low;
}
function
lower_bound(a, val) {
let lo = 0, hi = a.length - 1;
while
(lo < hi) {
let mid = Math.floor(lo + (hi - lo) / 2);
if
(a[mid] < val)
lo = mid + 1;
else
hi = mid;
}
return
lo;
}
function
ValidPair(a, n, l, r)
{
a.sort(
function
(a, b) {
return
a - b })
let pow10 =
new
Array(17).fill(1);
for
(let i = 1; i <= 16; i++) {
pow10[i] = pow10[i - 1] * 10;
}
let ans = 0;
for
(let j = 0; j < n; j++) {
let len = 0;
let cur = a[j];
while
(cur) {
cur = Math.floor(cur / 10);
len++;
}
let right = (r - a[j]) / pow10[len];
let left = (l - a[j] + pow10[len] - 1) / pow10[len];
if
(left <= right)
ans += (upper_bound(a, a + n, right)
- lower_bound(a, a + n, left));
}
return
ans;
}
let N = 2;
let L = 10, R = 52;
let arr = [2, 5];
document.write(ValidPair(arr, N, L, R) +
'<br>'
);
</script>