首页 > 编程语言 > 详细

树状数组

时间:2020-02-03 20:48:19      阅读:53      评论:0      收藏:0      [点我收藏+]

技术分享图片

开局一张图,剩下全靠编。

对于树状数组,我的理解是有技巧的应用前缀和+神仙一般的二进制规律

1、改点求段

改点从下往上,将全部包括了这个点的c全部更改

1 int lowbit(int x)
2 {
3     return x&(-x);
4 }
1 void add(int x,int y)//将第x个数加上y
2 {
3     a[x]+=y;
4     for(int i=x;i<=n;i+=lowbit(i))
5     {
6         c[i]+=y;
7     }
8 }

求段就是将大段分成一个一个的小段

1 int getsum(int x)//求[1,x]的和
2 {
3     int ans=0;
4     for(int i=x;i>0;i-=lowbit(i))
5     {
6         ans+=c[i];
7     }
8     return ans;
9 }

c数组的初始化就是在每一次输入a的时候在初始为0的a上add(i,a[i]);

树状数组

原文:https://www.cnblogs.com/greenofyu/p/12257061.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!