树状数组模板

来源:互联网 发布:python 英文词性标注 编辑:程序博客网 时间:2024/06/06 02:46

1)、单点增减+区间求和
思路:C[x]表示该点的元素:sum(x)=C[1]+C[2]+……C[x]

int arr[MAXN];inline int sum(int x){int res=0; while(x) res+=arr[x],x-=lowbit(x);return res;}inline void add(int x,int n){while(x<MAXN) arr[x]+=n,x+=lowbit(x);}inline int query(int x,int y){return sum(y)-sum(x-1);}

(2)、区间增减+单点查询
思路:C[x]表示该点元素与左边元素的差值:num[x]=C[1]+C[2]+……C[x]

int arr[MAXN];inline int sum(int x){int res=0; while(x) res+=arr[x],x-=lowbit(x);return res;}inline void add(int x,int n){while(x<MAXN) arr[x]+=n,x+=lowbit(x);}inline int update(int x,int y,int n){add(x,n); add(y+1,-n);}
原创粉丝点击