Поэтому я пытался решить эту проблему программирования.
Дан массив чисел и несколько запросов. Каждый запрос дает вам три числа a,b,c и просит вас ответить на сумму всех элементов от индекса a до индекса b (включая оба), которые меньше или равны c.
Например:
Данный массив: {2,4,6,1,5,1,6,4,5,4}
Необходимо ответить на 3 вопроса:
2 4 4 -> ответ=5 т.е. {4+1}
1 5 3 -> ответ=3 т.е. {2+1}
4 5 1 -> ответ=1
каждое значение в массиве меньше 10 ^ 5, длина массива и количество запросов могут варьироваться до 10 ^ 5
Вот что я сделал. Я использовал алгоритм Мо (разложение квадратного корня) для сортировки запросов и создал двоичное индексированное дерево для хранения совокупной суммы элементов, меньших, чем все значения от 1 до 10 ^ 5, и сделал обновление, перейдя от запросы к запросам. С этим алгоритмом общая сложность моего решения составляет O (q * sqrt (N) * log (N)), но это недостаточно быстро. Я искал лучший алгоритм. Я думаю, что разложение запросов на квадратный корень не сработает. Есть ли лучший алгоритм для решения этой проблемы?
Мне было интересно, может ли какая-то структура данных решить эту проблему, о которой я не знаю?