hdu 1892【二维树状数组】
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                hdu 1892【二维树状数组】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                O(∩_∩)O哈哈~二維樹狀數組被我搞出來了,太開心了,第一道二維樹狀數組,(~ o ~)~zZ
雖然中途還是出問題了,就是S詢問的時候我沒有考慮坐標的大小問題,還是搜了別人的代碼才知道的,看來自己考慮問題不周到,~~~~(>_<)~~~~
View Code 1 #include <cstdio>2 #include <cstring>
3 #include <algorithm>
4
5 int book[1005][1005];
6 int size = 1002;
7 void insert(int x,int y,int num)
8 {
9 for(int i = x;i <= size;i += (i&(-i)))
10 {
11 for(int j = y;j <= size;j += (j&(-j)))
12 {
13 book[i][j] += num;
14 }
15 }
16 }
17
18 int getsum(int x,int y)
19 {
20 int sum = 0;
21 for(int i = x;i > 0;i -= (i&(-i)))
22 {
23 for(int j = y;j > 0;j -= (j&(-j)))
24 {
25 sum += book[i][j];
26 }
27 }
28 return sum;
29 }
30 void init()
31 {
32 for(int i = 1;i <= size;i ++)
33 {
34 for(int j = 1;j <= size;j ++)
35 {
36 insert(i,j,1);
37 }
38 }
39 }
40 int main()
41 {
42 int T,cas = 1;
43 scanf("%d",&T);
44 while(T -- )
45 {
46 printf("Case %d:\n",cas ++);
47 int n;
48 scanf("%d",&n);
49 memset(book,0,sizeof(book));
50 init();
51 char s[3];
52 while( n --)
53 {
54 scanf("%s",s);
55 if(s[0] == 'S')
56 {
57 int a,b,c,d;
58 scanf("%d%d%d%d",&a,&b,&c,&d);
59 if(a > c) std::swap(a,c);//!
60 if(b > d) std::swap(b,d);
61 printf("%d\n",getsum(c+1,d+1)+getsum(a,b)-getsum(c+1,b)-getsum(a,d+1));
62 }
63 else if(s[0] == 'A')
64 {
65 int a,b,c;
66 scanf("%d%d%d",&a,&b,&c);
67 insert(a+1,b+1,c);
68 }
69 else if(s[0] == 'D')
70 {
71 int a,b,c;
72 scanf("%d%d%d",&a,&b,&c);
73 int num = getsum(a+1,b+1) + getsum(a,b) - getsum(a,b+1) - getsum(a+1,b);
74 if(num < c)
75 insert(a+1,b+1,-num);
76 else
77 insert(a+1,b+1,-c);
78 }
79 else if(s[0] == 'M')
80 {
81 int a,b,c,d,e;
82 scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
83 int num = getsum(a+1,b+1) + getsum(a,b) - getsum(a,b+1) - getsum(a+1,b);
84 if(num < e)
85 {
86 insert(a+1,b+1,-num);
87 insert(c+1,d+1,num);
88 }
89 else
90 {
91 insert(a+1,b+1,-e);
92 insert(c+1,d+1,e);
93 }
94 }
95 }
96 }
97 return 0;
98 }
還有就是坐標從0,0開始的,要記得加1……細節~~~
轉載于:https://www.cnblogs.com/Shirlies/archive/2012/03/23/2414339.html
總結
以上是生活随笔為你收集整理的hdu 1892【二维树状数组】的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: TabActivity中子Activit
- 下一篇: 一个简单的.NET MVC 实例
