树状数组的模板

本文介绍了树状数组的基本概念,包括一维和二维树状数组的实现原理与操作方法。通过具体的代码示例,展示了如何使用树状数组进行区间求和等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//树状数组的模板;
int lowbit(int i){
	return i&(-i);
}//lowbit(i)=2^k(其中k为i在二进制下末尾0的个数)

//下面的代码给原数组的下标为pos的位置上的元素a[pos]加上一个数num;

void  update(int pos,int num){
	while(pos<=n){//n为元素的个数 
		c[pos]=c[pos]+num;
		pos+=lowbit(pos);
	}
} 

//计算原数组A[1]到a[x]的和;
int sum(int x){
	int sum=0;
	while(x>0){
		sum+=c[x];
		x-=lowbit[x];
	}
	return sum;
} 
//二维树状数组
//作用:用于快速求数字的子矩阵的和;
void uodate (int i,int j,int k){//给a[i][j]加上k 
     while(i<=n){
     	int temp=j;
     	while(temp<=n){
     		c[i][temp]+=k;
     		temp+=lowbit(temp);
		 }
		 i+=lowbit(i);
	 }
} 
int sum(int i,int j){//查询a[1][1]到a[i][j]的和
       int sum=0;
	   while(i>0){
	   	 int temp=j;
	   	 while(temp>0){
	   	         sum+=c[i][temp];
	   	         temp-=lowbit(temp);
			}
			i-=lowbit(i);
	   } 
	   return sum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值