hdu 1892【二维树状数组】
2012-03-23 22:06
501 查看
O(∩_∩)O哈哈~二维树状数组被我搞出来了,太开心了,第一道二维树状数组,(~ o ~)~zZ
虽然中途还是出问题了,就是S询问的时候我没有考虑坐标的大小问题,还是搜了别人的代码才知道的,看来自己考虑问题不周到,~~~~(>_<)~~~~
View Code
还有就是坐标从0,0开始的,要记得加1……细节~~~
虽然中途还是出问题了,就是S询问的时候我没有考虑坐标的大小问题,还是搜了别人的代码才知道的,看来自己考虑问题不周到,~~~~(>_<)~~~~
View Code
#include <cstdio> #include <cstring> #include <algorithm> int book[1005][1005]; int size = 1002; void insert(int x,int y,int num) { for(int i = x;i <= size;i += (i&(-i))) { for(int j = y;j <= size;j += (j&(-j))) { book[i][j] += num; } } } int getsum(int x,int y) { int sum = 0; for(int i = x;i > 0;i -= (i&(-i))) { for(int j = y;j > 0;j -= (j&(-j))) { sum += book[i][j]; } } return sum; } void init() { for(int i = 1;i <= size;i ++) { for(int j = 1;j <= size;j ++) { insert(i,j,1); } } } int main() { int T,cas = 1; scanf("%d",&T); while(T -- ) { printf("Case %d:\n",cas ++); int n; scanf("%d",&n); memset(book,0,sizeof(book)); init(); char s[3]; while( n --) { scanf("%s",s); if(s[0] == 'S') { int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); if(a > c) std::swap(a,c);//! if(b > d) std::swap(b,d); printf("%d\n",getsum(c+1,d+1)+getsum(a,b)-getsum(c+1,b)-getsum(a,d+1)); } else if(s[0] == 'A') { int a,b,c; scanf("%d%d%d",&a,&b,&c); insert(a+1,b+1,c); } else if(s[0] == 'D') { int a,b,c; scanf("%d%d%d",&a,&b,&c); int num = getsum(a+1,b+1) + getsum(a,b) - getsum(a,b+1) - getsum(a+1,b); if(num < c) insert(a+1,b+1,-num); else insert(a+1,b+1,-c); } else if(s[0] == 'M') { int a,b,c,d,e; scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); int num = getsum(a+1,b+1) + getsum(a,b) - getsum(a,b+1) - getsum(a+1,b); if(num < e) { insert(a+1,b+1,-num); insert(c+1,d+1,num); } else { insert(a+1,b+1,-e); insert(c+1,d+1,e); } } } } return 0; }
还有就是坐标从0,0开始的,要记得加1……细节~~~
相关文章推荐
- See you~ (hdu1892 二维树状数组模板)
- HDU 1892 See you~(二维树状数组的单点更新,区间求值)
- 【二维树状数组】HDU 1892
- hdu 1892 二维树状数组
- HDU 1892 二维树状数组 模板题
- hdu 1892 See you 二维树状数组,很好的一道题
- HDU 1892 See you~ 二维树状数组更新点查找区间
- hdu 1892 树状数组,二维
- HDU 1892 See you~(二维树状数组 单点更新)
- hdu 1892 二维树状数组
- HDU 1892(树状数组二维)
- 二维树状数组 hdu 1892
- HDU 1892 See you~ 【 二维树状数组 】
- hdu - 1892 - See you~(二维树状数组(单点修改))
- hdu 1892 See you~ 二维树状数组
- hdu-1892-See you~ 二维树状数组
- HDU 1892 二维树状数组
- HDU 5517 Triple (2015沈阳站I题&&二维树状数组)
- HDU 5517 二维树状数组
- POJ 2155 Matrix ( 二维树状数组 ) || HDU 3584 Cube ( 三维树状数组 )