二分算法
一. 算法模板
int binarySearch (int l, int r) {
  while(l < r){
    int mid = l + r >> 1;
    if(check(mid)) r = mid;
    else l = mid + 1;
  }
  return l;
}当更新 l 的时候需要加 1
int binarySearch (int l, int r) {
  while(l < r){
    int mid = l + r + 1 >> 1;
    if(check(mid)) l = mid;
    else r = mid - 1;
  }
  return l;
}