http://en.wikipedia.org/wiki/Fenwick_tree
#ifndef TREE_ARR_H #define TREE_ARR_H // index [1, 1024] #define N 1025 #define Type int Type arr[N];
// 核心lowbit函数 int lowb(int t) { return t & (-t); }
// 一个位置数值改变,由lowbit向后迭代 void add(int i, Type v) { for (; i < N; arr[i] += v, i += lowb(i)); }
// [1,i]和,由lowbit向前迭代 Type sum(int i)//[1, i] { Type s = 0; for (; i > 0; s += arr[i], i -= lowb(i)); return s; } #endif // TREE_ARR_H
可扩展到到2维到多维
精髓是 一个位置数据的改变,对数时间可维护
基于区间减法