#include<cstdio>
#define lowbit(x) (x) & -(x)
const int maxn = 7000;
int tree_array[maxn], tree_2array[maxn][maxn];
//点修改O(log n) 区间查询O(log n)
//下标不能为零
//---------------------------------------------------------------
void update(int location, int value)
{
while(location <= maxn)
{
tree_array[location] += value;
location += lowbit(location);
}
}
int query(int location)
{
int ans = 0;
while(location)
{
ans += tree_array[location];
location -= lowbit(location);
}
return ans;
}
//---------------------------------------------------------------两种写法是一样的
void Plus(int location, int value)
{
for(int i = location; i <= maxn; i += lowbit(i))
tree_array[i] += value;
}
int getsum(int location)
{
int ans = 0;
for(int i = location; i >= 1; i -= lowbit(i))
ans += tree_array[i];
return ans;
}
//--------------------------------------------------------------二维扩展写法
//O(log^2 n)
void Plus2(int location_x, int location_y, int value)
{
for(int i = location_x; i <= maxn; i += lowbit(i))
for(int j = location_y; j <= maxn; j += lowbit(j))
tree_2array[i][j] += value;
}
int getsum2(int location_x, int location_y)
{
int ans = 0;
for(int i = location_x; i >= 1; i -= lowbit(i))
for(int j = location_y; j >= 1; j -= lowbit(j))
ans += tree_2array[i][j];
return ans;
}
int main()
{
}
树状数组模板
最新推荐文章于 2025-09-09 18:20:28 发布