А если по делу, то в таких задачах обычно предполагается, что введённые числа из диапазона
выбираются более-менее равновероятно. Ну и в этом случае можно применять какое угодно хэширование - например. разбить ваше число на блоки по
битов (с каким-то маленьким
, типа
) и взять их всеобщий побитовый xor. И его сохранить вместо самого числа. xor-ы в этом случае тоже будут распределены равновероятно. И тут нужен такой (не очень порядочный) трюк постановки задачи, чтобы входящий поток был какой-то адекватной длины и искомый повтор-то как раз вводился не случайно.
То есть если вы наткнулись на число с тем же xor-ом, что и одно из предыдущих, то вероятность случиться так на
-ом шаге случайно, равна
. Поэтому можно делать вывод что его туда ввёл кто-то разумный
-- 12.02.2017, 20:51 --Dmitriy40В том-то и загвоздка, что обрабатываемые числа могут быть порядка
. Массив на такое количество элементов не заведёшь. И как там ни храни интервалы, по памяти это выйдет не меньше (асимптотически), чем хранить напрямую все числа, а это делать как раз нельзя.