Мне действительно нравится решение Джондерри, но мне интересно, нужна ли этой проблеме такая сложная структура, как расширенное дерево бинарного поиска.Что если бы мы сохранили два массива, один с входными весами, скажем, a = {1,1,2,5}, а другой с совокупными весами (идея, очень похожая на решение Джондерри), которая была бы b = {1,2,4, 9}.Теперь сгенерируйте случайное число в [1 9] (скажем, x) и выполните его двоичный поиск в массиве накопленных сумм.Место i, где отмечены b [i] <= x и b [i-1]> x, и возвращается [i].Таким образом, если бы случайное число было 3, мы получили бы i = 3, и было бы возвращено [3] = 2.Это обеспечивает ту же сложность, что и решение с расширенным деревом, с более простой реализацией.