l = -1; u = n while l + 1 != u /* инвариант: x[l] < t && x[u] >= t && l < u */ m = (l + u) /2 if x[m] < t l = m else u = m /* утверждение: l+1 = u && x[l] < t && x[u] >= t */p = uif p >= n || x[p] != t p = -1