Re: Бинарный поиск с дубликатами
От: Кодт Россия  
Дата: 09.07.14 12:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть отсортированная последовательность типа

А>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

Делим интервал примерно пополам (примерно — потому что длина может быть нечётной) и смотрим, какую половину можно смело откинуть.
До тех пор, пока не получим интервал нулевой или единичной длины.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.