144 字
1 分钟
封装模板(7) 数据结构
树状数组
点更新, 区间查询
struct FwTree { vector<ll> bit; int n;
FwTree(int n) : n(n), bit(n + 1, 0) {}
FwTree(const vector<int>& a) : FwTree(a.size()) { for (int i = 1; i <= n; i++) bit[i] = a[i - 1]; for (int i = 1; i <= n; i++) { int pa = i + (i & -i); if (pa <= n) bit[pa] += bit[i]; } }
inline int lowbit(int x) { return x & (-x); }
void add(int x, ll val) { for (++x; x <= n; x += lowbit(x)) bit[x] += val; }
ll sum(int x) { ll ret = 0; for (++x; x > 0; x -= lowbit(x)) ret += bit[x]; return ret; }
ll sum(int l, int r) { if (l > r) return 0; return sum(r) - sum(l - 1); }}; 封装模板(7) 数据结构
https://fuwari.vercel.app/posts/封装模板7-数据结构/