Если, как вы утверждаете, «порядок объектов должен поддерживаться», тогда мы можем решить это с помощью двоичного поиска по N
, в O(|objects| * log m)
, где m
- общая сумма.
Статья @hlt, на которую ссылается комментарий, касающаяся многоканального разбиения номеров, будет применяться, если порядок объектов можно изменить. В этом случае, когда порядок фиксирован, мы можем просто попробовать разные N
s, упаковывая разделы как можно больше. Если N
, который мы выберем, слишком мал, мы в итоге превзойдем X
. Это делает N
упорядоченным и, следовательно, доступным для поиска.