Binary invariant trace

이진 탐색 수렴 조건

lower_bound와 firstTrue 계열은 `lo`, `hi`, `mid` 갱신보다 false 구간과 true 구간의 경계를 먼저 정의해야 합니다.

전제

판정 결과가 한 번만 바뀐다

단조성이 없으면 절반을 버리는 판단 자체가 성립하지 않습니다.

구간

[lo, hi)로 끝까지 유지

템플릿을 섞지 않도록 반환 의미와 종료 조건을 같은 표기로 둡니다.

갱신

후보를 버릴지 남길지 분리

`arr[mid] < target`이면 mid는 답이 아니므로 `lo = mid + 1`입니다.

반환

끝 위치도 의미 있게 처리

답이 없을 때 `n`을 반환하는지 문제 요구와 연결합니다.

빈 배열

루프 미진입 반환

0 반환이 삽입 위치로 맞는지 확인합니다.

중복 다수

첫 위치와 초과 위치 구분

`lower_bound`와 `upper_bound`의 조건식을 이름과 맞춥니다.

전부 실패

단조성 가정 점검

판정 함수가 흔들리면 무한 루프보다 먼저 모델을 의심합니다.