Пример
Код: Выделить всё
#include
#include
struct fenwick_tree
{
size_t len; // 0-based len
std::vector t; // 1-based tree, indexes [1:len]
fenwick_tree(std::vector const &a) :
len(a.size()), t(len + 1, 0)
{
for (size_t i = 0; i < len; ++i)
add_to(i, a[i]);
}
// 0-based input
int sum_to(size_t r) const
{
int s = 0;
for (++r; r > 0; r -= r & -r)
s += t[r];
return s;
}
// 0-based input
void add_to(size_t i, int delta)
{
for (++i; i
Подробнее здесь: [url]https://stackoverflow.com/questions/79341481/will-compilers-optimize-constructing-a-new-object-every-loop-if-its-size-stays-t[/url]