#include "BinaryIndexTree.h" #include #include #include namespace meow{ template inline BinaryIndexTree::BinaryIndexTree(): _array(0){ } template inline BinaryIndexTree::BinaryIndexTree(size_t __size, Value const& __value): _array(__size, __value){ } template inline BinaryIndexTree::BinaryIndexTree(BinaryIndexTree const& __tree2): _array(__tree2._array){ } // template inline void BinaryIndexTree::reset(size_t __size, Value const& __init){ _array.clear(); _array.resize(__size, __init); } // template inline void BinaryIndexTree::update(size_t __index, Value const& __value){ __index++; for( ; __index <= _array.size(); __index += (__index & -__index)){ _array[__index - 1] = _array[__index - 1] + __value; } } template inline Value BinaryIndexTree::query(ssize_t __index) const{ __index = std::min(__index + 1, (ssize_t)_array.size()); Value ret(0); for( ; 0 < __index; __index -= (__index & -__index)){ ret = ret + _array[__index - 1]; } return ret; } }