Примечание: очень похоже на ответ Симоне, когда я начал набирать его немного назад.Имеет записку в конце, хотя.Подход к индексированию, который я даю, по сути является ответом Симоны.
Где-то должен быть задействован цикл.
Псевдокод того, что я бы сделал, выглядит примерно так:
score = blah
for each raw => t
break raw into rMin -> rMax
if(rMin <= score and rMax >= score)
return t
Это избавляет от необходимости циклически перебирать каждое число между rMin и rMax (что я и имел в виду), но без какой-либо индексации это лучшее, что вы получите.
Примечание: если у вас есть тонна обращений к этому, и индексирование действительно стоило бы вашего времени, самый простой тип индексации - это просто хэш-карта оценки -> t записей.
По сути, вы бы проанализироваливаш пример данных выглядит примерно так:
index[5] = 0
index[6] = 2
index[7] = 3
index[8] = 3
index[9] = 3
Вам необходимо тщательно взвесить, если построение индекса будет занимать больше времени, чем просто циклическая обработка диапазонов.
Примечание: подход к индексированиюна самом деле то, что сказала Симона.