码迷,mamicode.com
首页 > 其他好文 > 详细

HOJ 1640 Mobile Phone

时间:2016-04-29 11:46:47      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

题意:有一个n*n的矩阵,op==1时,在(x,y)增加值z,op==2时,求以(x1,y1)和(x2,y2)构成的矩阵的和。

思路:二维线段树。

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int N=1111;
 4 int c[N][N],n;
 5 int lowbit(int x)
 6 {
 7     return x&-x;
 8 }
 9 void add(int x,int y,int z)
10 {
11     for(int i=x;i<=n;i=(i|(i-1))+1)
12         for(int j=y;j<=n;j=(j|(j-1))+1)
13             c[i][j]+=z;
14 }
15 int q(int x,int y)
16 {
17     int sum=0;
18     for(int i=x;i;i=i&(i-1))
19         for(int j=y;j;j=j&(j-1))
20             sum+=c[i][j];
21     return sum;
22 }
23 int main()
24 {
25     int op,x,y,z,x1,x2,y1,y2;
26     while(scanf("%d%d",&op,&n)!=EOF)
27     {
28         memset(c,0,sizeof(c));
29         while(scanf("%d",&op)&&op!=3)
30         {
31             if(op==1)
32             {
33                 scanf("%d%d%d",&x,&y,&z);
34                 add(x+1,y+1,z);
35             }
36             else
37             {
38                 scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
39                 x1++,x2++,y1++,y2++;
40                 printf("%d\n",q(x2,y2)+q(x1-1,y1-1)-q(x2,y1-1)-q(x1-1,y2));
41             }
42         }
43     }
44     return 0;
45 }
46 /*
47 i -= lowbit(i)   ==      i = i&(i-1)
48 i += lowbit(i)   ==      i = (i|(i-1))+1
49 */

参考文章:http://blog.csdn.net/hit_lingo/article/details/50845718

       http://www.cnblogs.com/yejinru/archive/2012/03/22/2412359.html

HOJ 1640 Mobile Phone

标签:

原文地址:http://www.cnblogs.com/L-King/p/5445612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!