POJ - 1195 - Mobile phones

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 1195 - Mobile phones相关的知识,希望对你有一定的参考价值。

题目链接: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的主要内容,如果未能解决你的问题,请参考以下文章

●POJ 1195 Mobile phones

POJ1195 Mobile phones

POJ1195 Mobile phones二维树状数组

POJ 1195 Mobile phones (二维树状数组)

POJ 1195-Mobile phones-二维树状数组

POJ1195 Mobile phones 二维线段树