code: def _find_block(starts, ends, cur_block, rec_num):   # @NoSelf
          '''
          Finds the block that rec_num is in if it is found. Otherwise it returns -1.
          It also returns the block that has the physical data either at or
          preceeding the rec_num.
          It could be -1 if the preceeding block does not exists.
          '''
          total = len(starts)
          if (cur_block == -1):
              cur_block = 0
          for x in range(cur_block, total):
              if (starts[x] <= rec_num and ends[x] >= rec_num):
                  return x, x
              if (starts[x] > rec_num):
                  break
          return -1, x-f _find_block(starts, ends, cur_block, rec_num):   # @NoSelf
          '''
          Finds the block that rec_num is in if it is found. Otherwise it returns -1.
          It also returns the block that has the physical data either at or
          preceeding the rec_num.
          It could be -1 if the preceeding block does not exists.
          '''
          total = len(starts)
          if (cur_block == -1):
              cur_block = 0
          for x in range(cur_block, total):
              if (starts[x] <= rec_num and ends[x] >= rec_num):
                  return x, x
              if (starts[x] > rec_num):
                  break
          return -1, x-1
docs: Finds the block that rec_num is in if it is found. Otherwise it returns -1.
          It also returns the block that has the physical data either at or
          preceeding the rec_num.
          It could be -1 if the preceeding block does not exists.