ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

acm算法之树状数组

2021-10-02 16:34:46  阅读:114  来源: 互联网

标签:树状 int sum2 value lowbite 算法 acm 数组


//树状数组,关于其单点更改,区间求和,求前缀和,建树的操作
#include<stdio.h>
#include<string.h> 
int c[300]={0};//树状数组 
int a[300]={0};
int count;//原数组节点个数 
int lowbite(int m)
{
return m&(-m);

} 
void updata(int x,int value)
{
a[x]+=value;
while(x<=count)
{
	c[x]+=value;
	x+=lowbite(x);
}	
}
int sectsum(int m,int n)//注意,[1,m]减去[1,n]的区间表示的范围为[n+1,m] 
{
	int sum1=0,sum2=0;
	while(m>0)
	{
		sum1+=c[m];
		m-=lowbite(m);
	}
	while(n>0)
	{
		sum2+=c[n];
		n-=lowbite(n);
	}
	return sum2-sum1;
}
int main(void)
{
	int i,m,n,j,value;
	scanf("%d",&count);
	memset(c,0,sizeof(c));//申请空间,十分重要 
	scanf("%d %d",&m,&n);
	for(i=1;i<=count;i++)//注意,i要从一开始 ,才会满足上面推的二进制结论等等 
	{
		scanf("%d",&value);
		updata(i,value);
	}
	printf("%d\n",sectsum(m-1,n));
	return 0; 
}

标签:树状,int,sum2,value,lowbite,算法,acm,数组
来源: https://blog.csdn.net/qq_52511089/article/details/120581182

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有