poj 2029Get Many Persimmon Trees解题报告

二维树状数组:类似于一维的状态下,二维存储的是一个区域内的状态。

View Code
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define N 105
 5 #define lowbit(x) x&-x
 6 using namespace std;
 7 int f[N][N];
 8 void init()
 9 {
10     memset(f,0,sizeof(f));
11 }
12 int m,n;
13 void add(int x,int y,int v)
14 {
15     int i,j;
16     for(i=x;i<=n;i+=lowbit(i))
17     for(j=y;j<=m;j+=lowbit(j))
18     f[i][j]+=v;
19 }
20 int getsum(int x,int y)
21 {
22     int sum=0;
23     int i,j;
24     for(i=x;i>=1;i-=lowbit(i))
25     for(j=y;j>=1;j-=lowbit(j))
26     sum+=f[i][j];
27     return sum;
28 }
29 int main()
30 {
31     int t;
32     int x,y;
33     int i,j,temp;
34     while(scanf("%d",&t)&&t)
35     {
36         scanf("%d%d",&n,&m);
37         init();
38         for(i=0;i<t;i++)
39         {
40             scanf("%d%d",&x,&y);
41             add(x,y,1);
42         }
43         scanf("%d%d",&x,&y);
44         int max=0;
45         for(i=x;i<=n;i++)
46         for(j=y;j<=m;j++)
47         {
48             temp=getsum(i,j)-getsum(i,j-y)-getsum(i-x,j)+getsum(i-x,j-y);
49             max=max>temp?max:temp;
50         }
51         printf("%d\n",max);
52     }
53     return 0;
54 }
原文地址:https://www.cnblogs.com/caozhenhai/p/2532220.html