Diferença entre a pesquisa binária básica para o limite superior e o limite inferior?

No artigohttp://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch, o autor discute a pesquisa binária. Ele faz uma distinção entre encontrar o valor mais baixo onde algo é verdadeiro e o valor mais alto onde algo é falso. A matriz que está sendo pesquisada se parece com:

falso falso falso verdadeiro verdadeiro

Estou curioso para saber por que esses dois casos são diferentes. Por que você não pode simplesmente encontrar o valor mais baixo que é verdadeiro e subtrair um para encontrar o valor mais alto que é falso?

Edit2: Ok, então eu entendo limite inferior vs superior. Agora, estou tentando entender, ao procurar o menor número inteiro maior ou igual à consulta, por que não podemos simplesmente mudar oif(mid>query) paraif(mid>=query) e faça com que ele abaixe em vez do limite superior.

Edit: Aqui está o que o artigo declarou:

"Agora, finalmente chegamos ao código que implementa a pesquisa binária, conforme descrito nesta e na seção anterior:

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

...

Se quiséssemos encontrar o último x para o qual p (x) é falso, conceberíamos (usando uma lógica semelhante à anterior) algo como:

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

. "

questionAnswers(3)

yourAnswerToTheQuestion