Я должен сказать, что я не продаюсь на сегментных деревьях как лучшее решение этой проблемы.То, являются ли они «лучшей» структурой данных, зависит от соотношения запросов ARRIVE и BUY, потому что каждый раз, когда вы совершаете продажу, будет достаточно много работы по обновлению дерева сегментов после удаления сегмента.,
Что если вы сохранили свой инвентарь в виде связанного списка, и каждый узел содержал количество предметов для продажи по определенной цене за единицу.Это значительно снизит стоимость вставки и удаления инвентаря.Чтобы проверить, можете ли вы совершить продажу, вам нужно пройтись по циклу while, накапливая стоимость и количество, пока не достигнете цели или не превысите стоимость.Преимущество здесь в том, что, если вы совершаете продажу, то узел, на котором вы остановились, теперь является самой низкой стоимостью единицы инвентаря, с которой вы хотите начать следующий поиск.Если вы работаете на языке сборки мусора, вы можете просто изменить ссылку на заголовок вашего списка на узел, на котором вы остановились, что сделало бы для краткого кода.
При поступлении нового инвентаря со вставкой стоимости за единицу в худшем случае O (n), где n - это количество прибытий, которое у вас есть.Я думаю, что в реальном мире это не будет плохой системой, потому что реальный бизнес будет ожидать большого количества продаж (счастливых), а не продаж (несчастных).Если этот подход работает плохо, есть много людей, которые хотели бы купить почти весь ваш инвентарь, но им не хватало денег, чтобы выполнить его.