标签:des style blog http color strong
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 14391 | Accepted: 6685 |
Description
Input
Output
Sample Input
0 4 1 1 2 3 2 0 0 2 2 1 1 1 2 1 1 2 -1 2 1 1 2 3 3
Sample Output
3 4
Source
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 using namespace std;
5
6 #define MAXN 1100
7
8 int tree[MAXN*3][MAXN*3],s;
9
10 void Add_y(int d,int dy,int L,int R,int y,int a) //加数列操作
11 {
12 tree[d][dy] += a; //相关矩阵全部加a
13
14 if(L==R){
15 return ;
16 }
17
18 int mid = (L+R)>>1;
19 if(mid>=y)
20 Add_y(d,dy<<1,L,mid,y,a);
21 else
22 Add_y(d,dy<<1|1,mid+1,R,y,a);
23 }
24
25 void Add_x(int d,int L,int R,int x,int y,int a) //加数行操作
26 {
27 Add_y(d,1,1,s,y,a); //每一个行块都要更新其对应的列块,这样才能将所有与(x,y)相关的矩阵的值更新
28
29 if(L==R){
30 return ;
31 }
32
33 int mid = (L+R)>>1;
34 if(mid>=x)
35 Add_x(d<<1,L,mid,x,y,a);
36 else
37 Add_x(d<<1|1,mid+1,R,x,y,a);
38 }
39
40
41 int Sum_y(int d,int dy,int L,int R,int b,int t)
42 {
43 if(L==b && R==t) //找到要找的矩阵,输出这个矩阵对应的值
44 return tree[d][dy];
45
46 //没找到
47 int mid = (L+R)>>1;
48 if(mid >= t)
49 return Sum_y(d,dy<<1,L,mid,b,t);
50 else if(mid < b)
51 return Sum_y(d,dy<<1|1,mid+1,R,b,t);
52 else
53 return Sum_y(d,dy<<1,L,mid,b,mid) + Sum_y(d,dy<<1|1,mid+1,R,mid+1,t);
54 }
55
56 int Sum_x(int d,int L,int R,int l,int r,int b,int t)
57 {
58 if(L==l && R==r){ //找到要找的行块,继续查找列块
59 return Sum_y(d,1,1,s,b,t);
60 }
61
62 //没找到
63 int mid = (L+R)>>1;
64 if(mid >= r)
65 return Sum_x(d<<1,L,mid,l,r,b,t);
66 else if(mid < l)
67 return Sum_x(d<<1|1,mid+1,R,l,r,b,t);
68 else
69 return Sum_x(d<<1,L,mid,l,mid,b,t) + Sum_x(d<<1|1,mid+1,R,mid+1,r,b,t);
70 }
71
72 int main()
73 {
74 int cmd,x,y,a,l,r,b,t;
75
76 while(scanf("%d",&cmd)!=EOF){
77 switch(cmd){
78 case 0: //初始化矩阵
79 scanf("%d",&s);
80 memset(tree,0,sizeof(tree));
81 break;
82
83 case 1: //加数
84 scanf("%d%d%d",&x,&y,&a);
85 Add_x(1,1,s,x+1,y+1,a);
86 break;
87
88 case 2: //求矩阵和
89 scanf("%d%d%d%d",&l,&b,&r,&t);
90 printf("%d\n",Sum_x(1,1,s,l+1,r+1,b+1,t+1));
91 break;
92
93 case 3: //退出程序
94 return 0;
95 default:
96 break;
97 }
98 }
99 return 0;
100 }
Freecode : www.cnblogs.com/yym2013
poj 1195:Mobile phones(二维线段树,矩阵求和,经典题),布布扣,bubuko.com
poj 1195:Mobile phones(二维线段树,矩阵求和,经典题)
标签:des style blog http color strong
原文地址:http://www.cnblogs.com/yym2013/p/3854273.html