树状数组 (模板)
2012-02-27 22:18
253 查看
树状数组的一维和二维模板
View Code
View Code
#include<iostream> #include<algorithm> using namespace std; const int MAXN = 1010; int a[MAXN][MAXN]; bool b[MAXN][MAXN]; int lowbit(int x) { return x & (-x); } void modify(int x,int y,int data) { for(int i=x;i<MAXN;i+=lowbit(i)) for(int j=y;j<MAXN;j+=lowbit(j)) a[i][j]+=data; } int get_sum(int x,int y) { int res=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) res+=a[i][j]; return res; } int main() { int n,x,y,x1,y1; char str[2]; scanf("%d",&n); memset(a,0,sizeof(a)); memset(b,false,sizeof(b)); while(n--) { scanf("%s",str); if(str[0]=='B') { scanf("%d %d",&x,&y); x++;y++; if(b[x][y]) continue; modify(x,y,1); b[x][y]=true; } else if(str[0]=='D') { scanf("%d %d",&x,&y); x++;y++; if(!b[x][y]) continue; modify(x,y,-1); b[x][y]=false; } else { scanf("%d %d %d %d",&x,&x1,&y,&y1); x++,y++; x1++,y1++; if(x>x1) swap(x,x1); if(y>y1) swap(y,y1); int ans=get_sum(x1,y1)-get_sum(x-1,y1)-get_sum(x1,y-1)+get_sum(x-1,y-1); printf("%d\n",ans); } } return 0; }
相关文章推荐
- 洛谷 P3374 【模板】树状数组 1
- hdu5497(树状数组模板)
- P3374 【模板】树状数组 1 单点修改与区间查询
- 树状数组的讲解感觉挺好,和我的一维,二维,树状数组的模板,希望对大家有用
- 文章标题 POJ 1195 :Mobile phones(二维树状数组 模板)
- 模板:二维树状数组 【洛谷P4054】 [JSOI2009]计数问题
- 树状数组的模板
- hdu 2642二维树状数组 单点更新区间查询 模板题
- sgu 180. Inversions (树状数组+离散化,第一道需要改模板的题目,好题)
- 树状数组--一维模板
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 树状数组模板
- poj2299Ultra-QuickSort【树状数组求逆序数、离散化】、【归并排序模板】
- 树状数组模板
- 树状数组模板区间更新 区间询问大全
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- luogu P3374 【模板】树状数组 1
- 敌兵布阵(树状数组模板题)
- 树状数组模板
- poj1195及二维树状数组模板