算法---树状数组


C++ 树状数组模板类

template  class FenwickTree {
  int limit;
  vector arr;

  T lowbit(T x) { return x & (-x); }

    public:
  FenwickTree(int limit) {
    this->limit = limit;
    arr = vector(limit + 1);
  }

  void update(int idx, T delta) {
    for (; idx <= limit; idx += lowbit(idx))
      arr[idx] += delta;
  }

  T query(int idx) {
    T ans = 0;
    for (; idx > 0; idx -= lowbit(idx))
      ans += arr[idx];
    return ans;
  }
};