// 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([2, 4, 5, 8, 9], 5, 8));
// function lower_bound(arr, target) {
// let n = arr.length, ans = -1;
// let left = 0, right = n-1, mid;
// 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(lower_bound([2, 4, 4, 5, 8, 9], 4))
function upper_bound(arr, target) {
let n = arr.length, ans = -1;
let left = 0, right = n-1, mid;
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(upper_bound([2, 4, 4, 5, 8, 9], 4))
Ly8geW91ciBjb2RlIGdvZXMgaGVyZQoKLy8gZnVuY3Rpb24gYmluYXJ5U2VhcmNoKGFyciwgbiwgdGFyZ2V0KSB7Ci8vIAlsZXQgbGVmdCA9IDAsIHJpZ2h0ID0gbi0xLCBtaWQ7CgkKLy8gCXdoaWxlKGxlZnQ8PXJpZ2h0KSB7Ci8vIAkJbWlkID0gTWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7Ci8vIAkJaWYoYXJyW21pZF0gPCB0YXJnZXQpewovLyAJCQlsZWZ0ID0gbWlkKzE7IAovLyAJCX0gZWxzZSBpZihhcnJbbWlkXSA+IHRhcmdldCkgewovLyAJCQlyaWdodCA9IG1pZC0xOwovLyAJCX0gZWxzZSB7Ci8vIAkJCXJldHVybiBtaWQ7Ci8vIAkJfQovLyAJfQovLyAJcmV0dXJuIC0xOwovLyB9CgovLyBjb25zb2xlLmxvZyhiaW5hcnlTZWFyY2goWzIsIDQsIDUsIDgsIDldLCA1LCA4KSk7CgovLyBmdW5jdGlvbiBsb3dlcl9ib3VuZChhcnIsIHRhcmdldCkgewovLyAJbGV0IG4gPSBhcnIubGVuZ3RoLCBhbnMgPSAtMTsKLy8gCWxldCBsZWZ0ID0gMCwgcmlnaHQgPSBuLTEsIG1pZDsKCQovLyAJd2hpbGUobGVmdDw9cmlnaHQpIHsKLy8gCQltaWQgPSBNYXRoLmZsb29yKChsZWZ0K3JpZ2h0KS8yKTsKLy8gCQlpZihhcnJbbWlkXSA8IHRhcmdldCl7Ci8vIAkJCWxlZnQgPSBtaWQrMTsgCi8vIAkJfSBlbHNlIHsKLy8gCQkJYW5zID0gbWlkOwovLyAJCQlyaWdodCA9IG1pZC0xOwovLyAJCX0KLy8gCX0KLy8gCXJldHVybiBhbnM7Ci8vIH0KCi8vIGNvbnNvbGUubG9nKGxvd2VyX2JvdW5kKFsyLCA0LCA0LCA1LCA4LCA5XSwgNCkpCgpmdW5jdGlvbiB1cHBlcl9ib3VuZChhcnIsIHRhcmdldCkgewoJbGV0IG4gPSBhcnIubGVuZ3RoLCBhbnMgPSAtMTsKCWxldCBsZWZ0ID0gMCwgcmlnaHQgPSBuLTEsIG1pZDsKCQoJd2hpbGUobGVmdDw9cmlnaHQpIHsKCQltaWQgPSBNYXRoLmZsb29yKChsZWZ0K3JpZ2h0KS8yKTsKCQlpZihhcnJbbWlkXSA8PSB0YXJnZXQpewoJCQlsZWZ0ID0gbWlkKzE7IAoJCX0gZWxzZSB7CgkJCWFucyA9IG1pZDsKCQkJcmlnaHQgPSBtaWQtMTsKCQl9Cgl9CglyZXR1cm4gYW5zOwp9Cgpjb25zb2xlLmxvZyh1cHBlcl9ib3VuZChbMiwgNCwgNCwgNSwgOCwgOV0sIDQpKQ==