А что если первым проходом определить минимальный/максимальный байт. Разбить на те же 100 блоков от и до. И потом в проходах по очереди каждый блок заполнять, Если он в диапазон попадает блока.
Тож дохера выходит, но сложность сводится к логарифмической + константа (количество блоков)
?