public class Main {
public static int upperBound(int[] arr, int target) {
int left = 0;
int right = arr.length;
while (left < right) {
int mid = left + (right - left) / 2;
if (arr[mid] <= target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
public static void main
(String[] args
) { int[] arr = {1, 2,3,4,5,5};
int target = 5;
int upperBoundIndex = upperBound(arr, target);
if (upperBoundIndex < arr.length) {
System.
out.
println("Upper bound of " + target
+ " is at index " + upperBoundIndex
); } else {
System.
out.
println("Upper bound of " + target
+ " is not found in the array. n = " + arr.
length); }
}
}
cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyBpbnQgdXBwZXJCb3VuZChpbnRbXSBhcnIsIGludCB0YXJnZXQpIHsKICAgICAgICBpbnQgbGVmdCA9IDA7CiAgICAgICAgaW50IHJpZ2h0ID0gYXJyLmxlbmd0aDsKCiAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewogICAgICAgICAgICBpbnQgbWlkID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKCiAgICAgICAgICAgIGlmIChhcnJbbWlkXSA8PSB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBsZWZ0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnRbXSBhcnIgPSB7MSwgMiwzLDQsNSw1fTsKICAgICAgICBpbnQgdGFyZ2V0ID0gNTsKICAgICAgICBpbnQgdXBwZXJCb3VuZEluZGV4ID0gdXBwZXJCb3VuZChhcnIsIHRhcmdldCk7CgogICAgICAgIGlmICh1cHBlckJvdW5kSW5kZXggPCBhcnIubGVuZ3RoKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXBwZXIgYm91bmQgb2YgIiArIHRhcmdldCArICIgaXMgYXQgaW5kZXggIiArIHVwcGVyQm91bmRJbmRleCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcHBlciBib3VuZCBvZiAiICsgdGFyZ2V0ICsgIiBpcyBub3QgZm91bmQgaW4gdGhlIGFycmF5LiBuID0gIiArIGFyci5sZW5ndGgpOwogICAgICAgIH0KICAgIH0KfQo=