Два варианта для рассмотрения:
- O (n) предварительных вычислений и O (logn) на запрос
- O (nlogn) предварительное вычисление и O (1) на запрос
Сначала работает, рекурсивно вычисляя минимум для всех пар в четных точках, затем все 4 в точках, кратных 4, затем все 8 во всех кратных 8 и так далее. Затем, когда вы хотите получить доступ к минимуму для определенного диапазона, вы разбиваете его на части, которые у вас уже есть, и вычисляете минимум из них.
Например, чтобы найти минимум элементов 1..10, вы используете минимум 1 и 2..3 и 4..7 и 8..9 и 10.
Вторая работает, вырабатывая минимум для всех пар во ВСЕХ местах, затем все 4 во ВСЕХ местах, затем все 8 во ВСЕХ местах. Когда у вас есть определенный диапазон, вы строите его как минимум из двух частей и вычисляете минимум из этих двух.
Например, чтобы найти минимум элементов 1..10, вы используете минимум 1..8 в сочетании с минимумом 3..10.