hdu 1892 See you~(二维树状数组)
2017-11-06 16:00
387 查看
二维BIT裸题
#include <bits/stdc++.h> using namespace std; const int MAXN = 1e3+3; #define lowbit(x) (x&(-x)) int f[MAXN][MAXN],a[MAXN][MAXN]; void add(int x, int y, int val) { for(int i = x; i < MAXN; i += lowbit(i)) for(int j = y; j < MAXN; j += lowbit(j)) f[i][j] += val; } int sum(int x, int y) { int ret = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) ret += f[i][j]; return ret; } void init() { memset(f,0,sizeof(f)); for(int i = 1; i < MAXN; ++i) { for(int j = 1; j < MAXN; ++j) { a[i][j] = 1; add(i,j,1); } } } int main() { int T,q,x1,y1,x2,y2,val,time = 0; char op; scanf("%d",&T); while(T--) { init(); printf("Case %d:\n",++time); scanf("%d",&q); while(q--) { scanf(" %c",&op); if(op == 'S') { scanf(" %d %d %d %d",&x1,&y1,&x2,&y2); ++x1,++y1,++x2,++y2; if(x1 > x2) swap(x1,x2); if(y1 > y2) swap(y1,y2); printf("%d\n",sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1)); } else if(op == 'A') { scanf(" %d %d %d",&x1,&y1,&val); ++x1,++y1; add(x1,y1,val); a[x1][y1] += val; } else if(op == 'D') { scanf(" %d %d %d",&x1,&y1,&val); ++x1,++y1; val = min(val,a[x1][y1]); add(x1,y1,-val); a[x1][y1] -= val; } else { scanf(" %d %d %d %d %d",&x1,&y1,&x2,&y2,&val); ++x1,++y1,++x2,++y2; val = min(a[x1][y1],val); add(x1,y1,-val); a[x1][y1] -= val; add(x2,y2,val); a[x2][y2] += val; } } } return 0; }
相关文章推荐
- hdu 1892 see you ~(二维树状数组)
- 【树状数组+二维】杭电 hdu 1892 See you~
- HDU 1892 See you~ 二维树状数组
- hdu 1892 See you~(二维树状数组)
- hdu 1892 See you~(二维树状数组)
- HDU 1892 See you~ (二维树状数组)
- HDU 1892 See you~ (二维树状数组)
- hdu1892 See you~ 二维树状数组
- HDU 1892 See you~(二维树状数组)
- HDU 1892 See you~(经典二维树状数组)
- HDU 1892 See you~(二维树状数组)
- hdu 1892 See you~(二维树状数组)
- hdu - 1892 - See you~(二维树状数组(单点修改))
- Hdu 1892 step5.3.1 See you~(树状数组)
- hdoj1892 see you~ (二维树状数组)
- HDU ACM 1892 See you~(二维树状数组)
- hdu 1892 See you~ 二维树状数组
- HDU 1892 See you~ 二维树状数组更新点查找区间
- HDU 1892 See you~(二维树状数组的单点更新,区间求值)
- See you~ (hdu1892 二维树状数组模板)