Разница между основным двоичным поиском верхней и нижней границ?

В статьеhttp://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearchАвтор обсуждает бинарный поиск. Он делает различие между поиском наименьшего значения, где что-то верно, и наивысшего значения, где что-то ложно. Разыскиваемый массив выглядит примерно так:

ложный ложный ложный истинный истинный

Мне любопытно, почему эти два случая различны. Почему вы не можете просто найти самое низкое значение, которое является истинным, а затем вычесть одно, чтобы найти самое высокое значение, которое является ложным?

Edit2: хорошо, так что я понимаю нижнюю или верхнюю границу. Теперь я пытаюсь понять, при поиске наименьшего целого числа, большего или равного запросу, почему мы не можем просто изменитьif(mid>query) вif(mid>=query) и сделать это сделать ниже, а не верхнюю границу.

Редактировать: вот что говорится в статье:

«Теперь мы наконец-то добрались до кода, который реализует бинарный поиск, как описано в этом и предыдущем разделе:

binary_search(lo, hi, p):
   while lo < hi:
      mid = lo + (hi-lo)/2
      if p(mid) == true:
         hi = mid
      else:
         lo = mid+1

   if p(lo) == false:
      complain                // p(x) is false for all x in S!

   return lo         // lo is the least x for which p(x) is true

...

Если бы мы хотели найти последний x, для которого p (x) ложно, мы разработали (используя аналогичное объяснение, как указано выше) что-то вроде:

binary_search(lo, hi, p):
   while lo < hi:
      mid = lo + (hi-lo+1)/2    // note: division truncates
      if p(mid) == true:
         hi = mid-1
      else:
         lo = mid

   if p(lo) == true:
      complain                // p(x) is true for all x in S!

   return lo         // lo is the greatest x for which p(x) is false

«.

Ответы на вопрос(3)

Ваш ответ на вопрос