Boundary Pattern

비교식 하나가 반환 의미를 바꾼다

세 패턴은 모두 [lo, hi)를 줄이지만, 후보로 남기는 기준이 다릅니다.

lower_bound
>= target
arr[mid] < t -> lo = mid + 1
거짓mid도 후보 -> hi = mid
upper_bound
> target
arr[mid] <= t -> lo = mid + 1
거짓초과 후보 -> hi = mid
firstTrue
단조 판정의 첫 참
왼쪽 확인 -> hi = mid
거짓오른쪽 이동 -> lo = mid + 1
예시: [1, 2, 2, 2, 4, 7], target=2
0
[1, 4)
4..5
중복 개수: upper - lower = 4 - 1 = 3