二维树状数组
#include<iostream>
#include<math.h>
#include<stdio.h>
#include<string.h>
#define MAX 102
using namespace std;
int c[MAX][MAX];
int lowbit(int x)
{
return x & (-x);
}
void add( int x,int y)
{
int i=x,j=y;
for(i=x;i<MAX;i+=lowbit(i))
for(j=y;j<MAX;j+=lowbit(j))
c[i][j]++;
}
int sum(int x,int y)
{
int i,k,sum = 0;
for(i=x; i>0; i-=lowbit(i))
for(k=y; k>0; k-=lowbit(k))
sum += c[i][k];
return sum;
}
int main()
{
int w,h,i,j,s,t,n;
int x,y,ans;
while(scanf("%d",&n))
{
if(n==0)break;
memset(c,0,sizeof(c));
scanf("%d%d",&w,&h);
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
}
scanf("%d%d",&s,&t);
ans=0;
for(i=s;i<=w;i++)
{
for(j=t;j<=h;j++)
{
ans=max(ans,sum(i,j)-sum(i-s,j)-sum(i,j-t)+sum(i-s,j-t));
}
}
printf("%d\n",ans);
}
}