树状数组
Posted kstranger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组相关的知识,希望对你有一定的参考价值。
树状数组能做的线段树都可以,但是有的时候为了代码简单,能写树状数组就不写线段树。
树状数组是一种类似线段树的数据结构,只不过树状数组上的操作比较简单,最简单的就是单点修改和区间查询
树状数组是按照数的二进制形式进行存储数据,s[1]存储的是a[1] ,s[2]存储的是a[1]+a[2] ,s[3]存储的是a[3],s[4]存储的是a[1]+a[2]+a[3]+a[4]依次类推
code:
int lowbit(int x){ return x & -x; } void add(int x,int v){ for(int i=x;i<=n;i+=lowbit(i)){ s[i]+=v; } } int get(int x){ int res=0; for(int i=x;i;i-=lowbit(i)){ res+=s[i]; } return res; }
相比较线段树来说,树状数组的板子看起来好简单,以后还是多使用这个吧
以上是关于树状数组的主要内容,如果未能解决你的问题,请参考以下文章