/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
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 target1 = 6;
int index1 = upperBound(arr, target1);
System.
out.
println("Upper bound of " + target1
+ " is at index: " + index1
);
int target2 = 4;
int index2 = upperBound(arr, target2);
System.
out.
println("Upper bound of " + target2
+ " is at index: " + index2
);
int target3 = 10;
int index3 = upperBound(arr, target3);
System.
out.
println("Upper bound of " + target3
+ " is at index: " + index3
);
int target4 = 0;
int index4 = upperBound(arr, target4);
System.
out.
println("Upper bound of " + target4
+ " is at index: " + index4
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgaW50IHVwcGVyQm91bmQoaW50W10gYXJyLCBpbnQgdGFyZ2V0KSB7CiAgICAgICAgaW50IGxlZnQgPSAwOwogICAgICAgIGludCByaWdodCA9IGFyci5sZW5ndGg7CgogICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgICAgaW50IG1pZCA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7CgogICAgICAgICAgICBpZiAoYXJyW21pZF0gPD0gdGFyZ2V0KSB7CiAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbGVmdDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W10gYXJyID0gezEsIDMsIDUsIDYsIDYsIDcsIDcsIDl9OwoKICAgICAgICBpbnQgdGFyZ2V0MSA9IDY7CiAgICAgICAgaW50IGluZGV4MSA9IHVwcGVyQm91bmQoYXJyLCB0YXJnZXQxKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVwcGVyIGJvdW5kIG9mICIgKyB0YXJnZXQxICsgIiBpcyBhdCBpbmRleDogIiArIGluZGV4MSk7CgogICAgICAgIGludCB0YXJnZXQyID0gNDsKICAgICAgICBpbnQgaW5kZXgyID0gdXBwZXJCb3VuZChhcnIsIHRhcmdldDIpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXBwZXIgYm91bmQgb2YgIiArIHRhcmdldDIgKyAiIGlzIGF0IGluZGV4OiAiICsgaW5kZXgyKTsKCiAgICAgICAgaW50IHRhcmdldDMgPSAxMDsKICAgICAgICBpbnQgaW5kZXgzID0gdXBwZXJCb3VuZChhcnIsIHRhcmdldDMpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXBwZXIgYm91bmQgb2YgIiArIHRhcmdldDMgKyAiIGlzIGF0IGluZGV4OiAiICsgaW5kZXgzKTsKCiAgICAgICAgaW50IHRhcmdldDQgPSAwOwogICAgICAgIGludCBpbmRleDQgPSB1cHBlckJvdW5kKGFyciwgdGFyZ2V0NCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVcHBlciBib3VuZCBvZiAiICsgdGFyZ2V0NCArICIgaXMgYXQgaW5kZXg6ICIgKyBpbmRleDQpOwogICAgfQp9