树状数组模板
2018-02-28 22:18
232 查看
单点更新,区间查询
区间更新,单点查询
二维树状数组的区间修改单点查询
#define lowbit(x) (x)&(-x) const int maxn=10005; int sum[10005]; void add(int x,int val) { while(x<maxn) { sum[x]+=val; x+=lowbit(x); } } int query(int x) { int ans=0; while(x) { ans+=sum[x]; x-=lowbit(x); } return ans; }
区间更新,单点查询
#define lowbit(x) (x)&(-x) const int maxn=10005; int sum[10005]; void add(int x,int val) { while(x<maxn) { sum[x]+=val; x+=lowbit(x); } } void update(int x,int y,int val) { add(x,val); add(y+1,-val); } int query(int x) { int ans=0; while(x) { ans+=sum[x]; x-=lowbit(x); } return ans; }
二维树状数组的区间修改单点查询
#define lowbit(x) (x)&(-x) typedef long long ll; ll sum[2505][2505]; int n,m,q; void update(int x,int y,ll val) { for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=m;j+=lowbit(j)) sum[i][j]+=val; } void update(int x1,int y1,int x2,int y2,ll val) { update(x1,y1,val); update(x2+1,y1,-val); update(x1,y2+1,-val); update(x2+1,y2+1,val); } ll query(int x1,int y1) { ll ans=0; for(int i=x1;i>0;i-=lowbit(i)) for(int j=y1;j>0;j-=lowbit(j)) ans+=sum[i][j]; return ans; }
相关文章推荐
- 树状数组模板
- poj2299Ultra-QuickSort【树状数组求逆序数、离散化】、【归并排序模板】
- HDU 1166 敌兵布阵(树状数组模板)
- 树状数组模板(max,min,区间和,区间修改,单点查询)
- 【模板】树状数组2
- 【树状数组】专题+模板
- 树状数组 BIT - 模板
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3368树状数组2)
- 【HDU5892 2016 ACM ICPC Asia Regional Shenyang Online A】【二维树状数组模板 区间修改】nn矩阵内子矩阵中各怪兽数量的奇偶性.cpp
- 敌兵布阵(树状数组模板题)
- nyoj-123 士兵杀敌(四) (树状数组插线问点—模板题)
- 树状数组模板
- 树状数组的讲解感觉挺好,和我的一维,二维,树状数组的模板,希望对大家有用
- 树状数组模板程序
- 树状数组模板及poj几道简单题
- (模板)树状数组 (区间修改,单点查询)
- 树状数组求逆序数的模板(离散化处理)
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3372线段树1)
- 树状数组模板
- 【NOIP模板】 树状数组