树状数组单点更新和区间查询
2014-12-04 23:36
423 查看
这里是最基本的操作。
单操作时间复杂度O(logN),空间复杂度O(N).
单操作时间复杂度O(logN),空间复杂度O(N).
#include <fstream> #include <iostream> #include <cstdio> using namespace std; int n,m; int a[100002],tree[100002]; void build();//建树状数组 int read(int pos);//求 sum[1,pos]的答案 void update(int pos,int val);//把a[pos]加上v int main(){ //freopen("D:\\input.in","r",stdin); //freopen("D:\\output.out","w",stdout); int bo,t1,t2; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); build(); for(int i=1;i<=m;i++){ scanf("%d%d%d",&bo,&t1,&t2); if(bo) update(t1,t2); else printf("%d\n",read(t2)-read(t1-1)); } return 0; } void build(){ tree[0]=0; for(int i=1;i<=n;i++){ tree[i]=a[i]; for(int j=i-1;j>i-(i&(-i));j=j-(j&(-j))) tree[i]+=tree[j]; } } int read(int pos){ int ans=0; while(pos>0){ ans+=tree[pos]; pos-=pos&(-pos); } return ans; } void update(int pos,int val){ while(pos<=n){ tree[pos]+=val; pos+=pos&(-pos); } }
相关文章推荐
- POJ 1195 - Mobile phones 二维树状数组(单点更新..区间查询)
- HDU 1556 Color the ball (一维树状数组,区间更新,单点查询)
- (树状数组)hdu1556 Color the ball(区间更新,单点查询)
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- 树状数组(单点更新,区间查询)
- hdu2642二维树状数组单点更新+区间查询
- hdu2642-二维树状数组 单点更新 区间查询
- 树状数组单点更新和区间更新,二维数组poj2155(区间更新,单点查询)(已加入区间修改区间查询)
- 树状数组模板(区间更新单点查询)
- HDu 1556 Color the ball【线段树&&树状数组】区间更新,单点查询
- hdu 2642二维树状数组 单点更新区间查询 模板题
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- hdu2642二维树状数组单点更新+区间查询
- poj 2155 第一天学树状数组,还没怎么搞清楚二维的区间更新单点查询
- POJ 2155 - Matrix 二维树状数组..区间更新..单点查询
- [HDU 4031]Attack[树状数组区间更新单点查询]
- hdu 2642二维树状数组 单点更新区间查询 模板题
- hdu 4533(树状数组区间更新+单点查询)
- 树状数组基本模版(区间更新,单点查询)
- NBOJv2 1050 Just Go(线段树/树状数组区间更新单点查询)