//自定义类型需重载 + - 运算符 template <typename T, int maxn> classbinary_indexed_tree { T c[maxn + 10]; public: voidadd(int p, T v){ p++; for (; p <= maxn; p += p & -p) c[p] += v; } T query(int p){ p++; T v = 0; for (; p; p -= p & -p) v += c[p]; return v; } T range(int l, int r){ returnquery(r) - query(l - 1); } };