Проблема
У меня есть массив с N числами. Числа могут быть дискретными, а также могут быть неупорядоченными. Мне нужно ответить на вопросы Q о том, сколько различных чисел находится между A и B. Где A, B — индексы между 0 ‹= A ‹= B ‹ array.Length.
Я знаю, как это сделать O(N) на запрос с помощью HashTable, но я прошу более эффективное решение. Я пытался улучшить его с помощью декомпозиции sqrt, а также с помощью дерева сегментов, но не смог. Я не показываю код, потому что не нашел ни одной сработавшей идеи. Я ищу кого-то, чтобы дать объяснение более быстрого решения.
ОБНОВЛЕНИЕ
Я читал, что вы можете собирать запросы, а затем отвечать на них все, используя двоичное индексированное дерево (BIT). Может кто-нибудь объяснить, как это сделать. Предположим, я знаю, как работает BIT.
different numbers
между A и B. Если речь идет о количестве чисел, т.е. диапазон, то почему бы просто не использоватьB-A-1
- person C0deDaedalus   schedule 07.01.2018O(logn)
. Это отличный ответ для начала. - person user3483203   schedule 07.01.2018