详见(《用极大化思想解决最大子矩阵问题》论文)(这算个毛。。。。)
#include<cstdio>
#include<algorithm>
using namespace std;
struct newtype {int x,y;};
newtype a[6000];
bool cmp(const newtype &p,const newtype &q) {return(p.x<q.x);}
int main()
{
int l,w,n,ans=0;
scanf("%d %d %d",&l,&w,&n);
for(int i=1;i<=n;i++)
scanf("%d %d",&a[i].x,&a[i].y);
a[++n]=(newtype){0,0}; a[++n]=(newtype){l,0};
a[++n]=(newtype){l,w}; a[++n]=(newtype){0,w};
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
int down=0,up=w;
for(int j=i+1;j<=n;j++)
{
if(a[j].x==a[i].x) continue;
ans=max(ans,abs((up-down)*(a[i].x-a[j].x)));
if(a[j].y==a[i].y) break;
if(a[j].y>a[i].y) up=min(up,a[j].y);
if(a[j].y<a[i].y) down=max(down,a[j].y);
}
}
printf("%d",ans);
while(1);
return 0;
}