树状数组模板

#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()
{
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值