树状数组是一个查询和修改复杂度都为 \(log\left(n\right)\) 的数据结构
所有树状数组能够完成的线段树都能够完成,而线段树能够完成的树状数组
- 那么既然线段树能够完成所有树状数组能够完成的,树状数组有什么用呢?
- 因为树状数组简洁,内存小,常数小
可以先百度一下树状数组了解树状数组
单点修改,区间查询
#include <cstdio> using namespace std; void Update(int i,int x){ while (i<=MAX_TREE_SIZE) tr[i]+=x,i+=lowbit(i); } int Query(int i){ int sum=0; while (i!=0) sum=sum+tr[i],i-=lowbit(i); return sum; }