//memset c 0 before use
int c[MAXN];
//n -> update place
//v -> update value
void update(int n,int v)
{
for(;n<=MAXN;n+=(n&-n))
c[n]+=v;
}
//get the sum from 1 to n (BIT starts from 1)
int read(int n)
{
int sum=0;
for(;n>0;n-=(n&-n))
sum+=c[n];
return sum;
}
//if need oprate different array, use int* array
/////////////////////////////////////////////
int c[MAXX][MAXY];
//update at (x,y)
void update2D(int x,int y,int v)
{
for(;x<=MAXX;x+=(x&-x))
for(int i=y;i<=MAXY;i+=(i&-i))
c[x][i]+=v;
}
//get the sum from (1,1) to (x,y)
int read2D(int x,int y)
{
int sum=0;
for(;x>0;x-=(x&-x))
for(int i=y;i>0;i-=(i&-i))
sum+=c[x][i];
return sum;
}Binary Indexed Tree Template
最新推荐文章于 2025-07-16 19:43:38 发布
本文介绍了一维和二维树状数组(Binary Indexed Tree, BIT)的基本操作,包括更新和查询功能。在一维情况下,提供了如何进行单点更新及获取前缀和的方法;在二维情况下,则展示了如何对矩阵中的特定位置进行更新以及如何求得矩形区域内的元素总和。
2889

被折叠的 条评论
为什么被折叠?



