// your code goes here
function binarySearch(arr, n, target) {
let left=0, right=n-1, mid;
while(left<=right) {
mid = Math.floor((left+right)/2);
if(arr[mid] < target) {
left = mid+1;
} else if(arr[mid] > target) {
right = mid-1;
} else {
return mid;
}
}
return -1;
}
// console.log(binarySearch([1, 3, 4, 4, 7, 8, 8, 9], 8, 7))
function lowerBound(arr, n, target) {
let left=0, right=n-1, mid, ans=-1;
while(left<=right) {
mid = Math.floor((left+right)/2);
if(arr[mid] < target) {
left = mid+1;
} else if(arr[mid] >= target) {
ans = mid;
right = mid-1;
}
}
return ans;
}
// console.log(lowerBound([1, 3, 4, 4, 7, 8, 8, 9], 8, 5))
function upperBound(arr, n, target) {
let left=0, right=n-1, mid, ans=-1;
while(left<=right) {
mid = Math.floor((left+right)/2);
if(arr[mid] <= target) {
left = mid+1;
} else {
ans = mid;
right = mid-1;
}
}
return ans;
}
console.log(upperBound([1, 3, 4, 4, 7, 8, 8, 9], 8, 4))
Ly8geW91ciBjb2RlIGdvZXMgaGVyZQoKZnVuY3Rpb24gYmluYXJ5U2VhcmNoKGFyciwgbiwgdGFyZ2V0KSB7CglsZXQgbGVmdD0wLCByaWdodD1uLTEsIG1pZDsKCXdoaWxlKGxlZnQ8PXJpZ2h0KSB7CgkJbWlkID0gTWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7CgkJaWYoYXJyW21pZF0gPCB0YXJnZXQpIHsKCQkJbGVmdCA9IG1pZCsxOwoJCX0gZWxzZSBpZihhcnJbbWlkXSA+IHRhcmdldCkgewoJCQlyaWdodCA9IG1pZC0xOwoJCX0gZWxzZSB7CgkJCXJldHVybiBtaWQ7CgkJfQoJfQoJcmV0dXJuIC0xOwp9CgovLyBjb25zb2xlLmxvZyhiaW5hcnlTZWFyY2goWzEsIDMsIDQsIDQsIDcsIDgsIDgsIDldLCA4LCA3KSkKCmZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyLCBuLCB0YXJnZXQpIHsKCWxldCBsZWZ0PTAsIHJpZ2h0PW4tMSwgbWlkLCBhbnM9LTE7Cgl3aGlsZShsZWZ0PD1yaWdodCkgewoJCW1pZCA9IE1hdGguZmxvb3IoKGxlZnQrcmlnaHQpLzIpOwoJCWlmKGFyclttaWRdIDwgdGFyZ2V0KSB7CgkJCWxlZnQgPSBtaWQrMTsKCQl9IGVsc2UgaWYoYXJyW21pZF0gPj0gdGFyZ2V0KSB7CgkJCWFucyA9IG1pZDsKCQkJcmlnaHQgPSBtaWQtMTsKCQl9Cgl9CglyZXR1cm4gYW5zOwp9Ci8vIGNvbnNvbGUubG9nKGxvd2VyQm91bmQoWzEsIDMsIDQsIDQsIDcsIDgsIDgsIDldLCA4LCA1KSkKCmZ1bmN0aW9uIHVwcGVyQm91bmQoYXJyLCBuLCB0YXJnZXQpIHsKCWxldCBsZWZ0PTAsIHJpZ2h0PW4tMSwgbWlkLCBhbnM9LTE7Cgl3aGlsZShsZWZ0PD1yaWdodCkgewoJCW1pZCA9IE1hdGguZmxvb3IoKGxlZnQrcmlnaHQpLzIpOwoJCWlmKGFyclttaWRdIDw9IHRhcmdldCkgewoJCQlsZWZ0ID0gbWlkKzE7CgkJfSBlbHNlIHsKCQkJYW5zID0gbWlkOwoJCQlyaWdodCA9IG1pZC0xOwoJCX0KCX0KCXJldHVybiBhbnM7Cn0KCmNvbnNvbGUubG9nKHVwcGVyQm91bmQoWzEsIDMsIDQsIDQsIDcsIDgsIDgsIDldLCA4LCA0KSkK