顺便也发一下二维的树状数组
#include<iostream>
using namespace std;
#define maxn 110
int c[maxn][maxn];
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int y)
{
for(int i=x;i<=maxn;i+=lowbit(i))
for(int j=y;j<=maxn;j+=lowbit(j))
c[i][j]++;
}
int sum(int x,int y)
{
int ret=0;
for(int i=x;i;i-=lowbit(i))
for(int j=y;j;j-=lowbit(j))
ret+=c[i][j];
return ret;
}
int main()
{
int N,n,m;
int i,j,x,y;
while(cin>>N&&N!=0)
{
cin>>n>>m;
memset(c,0,sizeof(c));
for(i=0;i<N;i++)
scanf("%d%d",&x,&y),add(x,y);
scanf("%d%d",&x,&y);
int max=0,temp;
for(i=x;i<=n;i++)
for(j=y;j<=m;j++)
{
temp=sum(i,j)-sum(i-x,j)-sum(i,j-y)+sum(i-x,j-y);
max=(max>=temp?max:temp);
}
cout<<max<<endl;
}
return 0;
}