Здравствуйте, Аноним, Вы писали:
А>есть отсортированная последовательность типа
А>0,1,5,6,6,6,6,6,7
А>нужно за логарифмическое время найти первый элемент равный либо 6 (то есть после 5 — кой) и последний (перед 7 — кой)
Это называется lower_bound и upper_bound.
X[k-1] < Q <= X[k] — lower_bound, т.е. всё, что левее (исключая найденную позицию), строго меньше искомого
X[k-1] <= Q < X[k] — upper_bound, т.е. всё, что правее (включая найденную позицию), строго больше искомого
оба алгоритма дихотомические, отличаются лишь условием.
http://en.cppreference.com/w/cpp/algorithm/lower_bound
http://en.cppreference.com/w/cpp/algorithm/upper_bound
Делим интервал примерно пополам (примерно — потому что длина может быть нечётной) и смотрим, какую половину можно смело откинуть.
До тех пор, пока не получим интервал нулевой или единичной длины.