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, 3, 5, 6 , 6, 7, 7, 9};
        int target = 6;
        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);         }
    }
}
 
				cHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyBpbnQgdXBwZXJCb3VuZChpbnRbXSBhcnIsIGludCB0YXJnZXQpIHsKICAgICAgICBpbnQgbGVmdCA9IDA7CiAgICAgICAgaW50IHJpZ2h0ID0gYXJyLmxlbmd0aDsKCiAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewogICAgICAgICAgICBpbnQgbWlkID0gbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMjsKCiAgICAgICAgICAgIGlmIChhcnJbbWlkXSA8PSB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBsZWZ0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBpbnRbXSBhcnIgPSB7MSwgMywgNSwgNiAsIDYsIDcsIDcsIDl9OwogICAgICAgIGludCB0YXJnZXQgPSA2OwogICAgICAgIGludCB1cHBlckJvdW5kSW5kZXggPSB1cHBlckJvdW5kKGFyciwgdGFyZ2V0KTsKCiAgICAgICAgaWYgKHVwcGVyQm91bmRJbmRleCA8IGFyci5sZW5ndGgpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcHBlciBib3VuZCBvZiAiICsgdGFyZ2V0ICsgIiBpcyBhdCBpbmRleCAiICsgdXBwZXJCb3VuZEluZGV4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVwcGVyIGJvdW5kIG9mICIgKyB0YXJnZXQgKyAiIGlzIG5vdCBmb3VuZCBpbiB0aGUgYXJyYXkuIG4gPSAiICsgYXJyLmxlbmd0aCk7CiAgICAgICAgfQogICAgfQp9Cg==