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

POJ - 1195 - Mobile phones

时间:2017-08-20 00:45:42      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:eve   .net   const   ios   cli   ide   name   增加   pre   

题目链接:POJ - 1195

题目大意:

初始化一个n*n的数组为0。

进行如下操作:

1.输入 A,B,K。

坐标(A,B)增加K。

2.数组A,B,C,D

求以(A,B)为左上点,

以(C,D)为右下点的矩阵的和。

题目分析:

二维树状数组,

其实类似于一维的,不过增加了一层循环。

给出代码:

技术分享
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 int N;
 7 const int inf=1024+10;
 8 int vis[inf+10][inf+10];
 9 int bit(int x)
10 {
11     return (x&(-x));
12 }
13 int sum(int x,int y)
14 {
15     int s=0;
16     for(int i=x;i>0;i-=bit(i))
17     {
18         for(int j=y;j>0;j-=bit(j))
19             s+=vis[i][j];
20     }
21     return s;
22 }
23 int add(int x,int y,int A)
24 {
25     for(int i=x;i<=N;i+=bit(i))
26         for(int j=y;j<=N;j+=bit(j))
27         vis[i][j]+=A;
28 }
29 int main()
30 {
31    int a;
32    while(cin>>a)
33    {
34        if(a==0)
35        {
36            scanf("%d",&N);
37            N=N+10;
38        }
39        if(a==3)
40         break;
41        if(a==1)
42        {
43            int x;
44            int y;
45            int k;
46            scanf("%d%d%d",&x,&y,&k);
47            add(x+1,y+1,k);
48        }
49        if(a==2)
50        {
51            int a,b,c,d;
52            scanf("%d%d%d%d",&a,&b,&c,&d);
53            a++;
54            b++;
55            c++;
56            d++;
57            int ans=sum(c,d)-sum(c,b-1)-sum(a-1,d)+sum(a-1,b-1);
58            printf("%d\n",ans);
59        }
60    }
61    return 0;
62 }
View Code

 

POJ - 1195 - Mobile phones

标签:eve   .net   const   ios   cli   ide   name   增加   pre   

原文地址:http://www.cnblogs.com/DLKKILL/p/7398388.html

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