树状数组-模板

一维树状数组

#define lowbit(x) ((x)&(-x))
#define M 1004		//线段的长度或处理的个数
int maxn,c[M];
void update(int p,int d)
{
	while(p<=maxn){
		c[p]+=d;
		p+=lowbit(p);
	}
}
int sum(int p)
{
	int ans=0;
	while(p>0){
		ans+=c[p];
		p-=lowbit(p);
	}
	return ans;
}


二维树状数组

#define lowbit(x) ((x)&(-x))
#define M 1004
int maxr,maxc,c[M][M];
void update(int p,int q,int d)
{
	int qq=q;	//保存初值
	for(;p<=maxr;p+=lowbit(p))
		for(q=qq;q<=maxc;q+=lowbit(q))
			c[p][q]+=d;
}
int sum(int p,int q)
{
	int ans=0,qq=q;
	for(;p>0;p-=lowbit(p))
		for(q=qq;q>0;q-=lowbit(q))
			ans+=c[p][q];
	return ans;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值