洛谷 P3374 【模板】树状数组 1
发布日期:2021-05-07 13:07:11 浏览次数:12 分类:原创文章

本文共 706 字,大约阅读时间需要 2 分钟。

吼吼吼

今天学习了树状数组
前一段时间没有认真看别人的讲解,
所以一直觉得很难,
今天仔细学了学,发现好像没那么难呢!


习题抽空做


想学习树状数组的同学可以在洛谷此题第一篇题解上学习,非常容易理解()

不多说,上模板!

#include<iostream>#include<cstdio>using namespace std;int n,m,a,w,x,y;int tree[5000010]; int lowbit(int x)      //去掉从右往左数第一个1{   	return x&-x;}void add(int i,int k)     //单点修改{   	while(i<=n)	 {   	 	tree[i]+=k;	 	i+=lowbit(i);	 }}int sum(int x)         //区间求和{   	int ans=0;	while(x!=0)	 {   	 	ans+=tree[x];	 	x-=lowbit(x);	 }	return ans;}int main(){   	cin>>n>>m;	for(int i=1; i<=n; i++)	 {   	 	scanf("%d",&a);	 	add(i,a);	 }	for(int i=1; i<=m; i++)	 {   	 	scanf("%d%d%d",&w,&x,&y);	 	if(w==1)	 	  add(x,y);	 	else if(w==2)	 	  cout<<sum(y)-sum(x-1)<<endl;   //巧妙之处,很像前缀和的求法	 }	return 0;} 
上一篇:纪中2020.3.18普及C组模拟赛总结
下一篇:洛谷 P1551 亲戚【并查集】

发表评论

最新留言

很好
[***.229.124.182]2025年03月31日 13时36分54秒