JavaでC++のlower_boundとupper_boundを実装

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);

を使う。