AtCoderでよく使うので、念のため書き残しておく。
詳細は Javaでの二分探索、lower_boundとupper_boundの実装 - naoppyの日記 に記述されています。Integerの配列aに対して、値bのlower_boundを求めるのに、
~Arrays.binarySearch(a, b, (x,y)->(x.compareTo(y)>=0) ? 1 : -1);
を使う。ここでArraysでComparatorを指定するため、必ずObject型の配列を使用する必要がある。また、aがCollectionsの場合では、
~Collections.binarySearch(a, b, (x,y)->(x.compareTo(y)>=0) ? 1 : -1);
を使う。
また、upper_boundを求めるのに、
~Arrays.binarySearch(a, b, (x,y)->(x.compareTo(y)>0) ? 1 : -1);
か
~Collections.binarySearch(a, b, (x,y)->(x.compareTo(y)>0) ? 1 : -1);
を使う。