poj1195Mobile phones(二维树状数组)

http://poj.org/problem?id=1195

模版题 i写成k了 找了一个多小时没找出来。。

 1 #include <iostream>

 2 #include<cstring>

 3 #include<algorithm>

 4 #include<stdlib.h>

 5 #include<cstdio>

 6 using namespace std;

 7 #define N 1050

 8 #define lowbit(x) (x&(-x))

 9 int n,c[N][N];

10 void add(int i,int j,int da)

11 {

12     int k;

13     while(i<=n)

14     {

15         k = j;

16         while(k<=n)

17         {

18             c[i][k]+=da;

19             k+=lowbit(k);

20         }

21         i+=lowbit(i);

22     }

23 }

24 int getsum(int i,int j)

25 {

26     int sum=0,k;

27     while(i)

28     {

29         k = j;

30         while(k)

31         {

32             sum+=c[i][k];

33             k-=lowbit(k);

34         }

35         i-=lowbit(i);

36     }

37     return sum;

38 }

39 int main()

40 {

41     int k,a,b,cc,d,t;

42     cin>>t>>n;

43     memset(c,0,sizeof(c));

44     while(scanf("%d",&k),k!=3)

45     {

46         if(k==1)

47         {

48             scanf("%d%d%d",&a,&b,&cc);

49             add(a+1,b+1,cc);

50         }

51         else if(k==2)

52         {

53             scanf("%d%d%d%d",&a,&b,&cc,&d);

54             a++;b++;cc++;d++;

55             printf("%d\n",getsum(cc,d)-getsum(a-1,d)-getsum(cc,b-1)+getsum(a-1,b-1));

56         }

57     }

58     return 0;

59 }
View Code

 

你可能感兴趣的:(mobile)