Fenwick tree - это структура данных, которая позволяет выполнять два вида операций (вы можете увеличить ее с помощью большего количества операций):
-  обновление точки update(index, value)
-  префикс sum query(index)
Обе операции находятся в O(log(n)), где n - размер массива. У меня нет проблем с пониманием того, как выполнять обе операции и логику, лежащую в их основе.
Мой вопрос в том, как я могу инициализировать дерево Fenwick из массива. Ясно, что я могу достичь этого в O(nlog(n)), вызывая n times update(i, arr[i]), но есть способ инициализировать его в O(n).
Почему я спрашиваю об этом, если википедия говорит, что вы можете инициализировать в nlog(n)? Поскольку статья настолько рудиментарна, что я не уверен, что это лучшая сложность, которую можно достичь. Кроме того, рисование параллелей с наивным созданием кучи, которое делается путем заполнения кучи один за другим и может быть достигнуто в O(nlog(n)) по сравнению с умной инициализацией кучи в O(n), дает мне надежду на то, что что-то подобное можно сделать в дереве Фенвика.
