Problem:
Largest Rectangle

Given a matrix (H × W) which contains only 1 and 0, find the area of the largest rectangle which only contains 0s.

Input

H W
c1,1 c1,2 ... c1,W
c2,1 c2,2 ... c2,W
:
cH,1 cH,2 ... cH,W

In the first line, two integers H and W separated by a space character are given. In the following H lines, ci,j, elements of the H × W matrix, are given.

Output

Print the area (the number of 0s) of the largest rectangle.

Constraints

1 ≤ H, W ≤ 1,400

Sample Input

4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0

Sample Output

6

Solution in C (judge verdict: Time Limit Exceeded)

#include <stdio.h>
#define SIZ 1400
int m[SIZ][SIZ];
char z[9999999];
int get(){
    static int input_count=0;
    int r=0;
    for(;'0'<=z[input_count]&&z[input_count]<='9';)r=r*10+z[input_count++]-'0';
    input_count++;
    return r;
}
int main(){
    fread(z,1,sizeof(z),stdin);
    int i,j,k,y=get(),x=get(),r,M=0;
    for(j=0;j<y;j++)for(r=i=0;i<x;m[j][i]=r,i++){
        int t=get();
        r=t==0?r+1:0;
    }
    for(r=i=0;i<x;i++)for(j=0;j<y;j++)for(M=x,k=j;k<y;k++){
        if(M>m[k][i])M=m[k][i];
        if(!M)break;
        int z=k-j+1;
        if(r<M*z)r=M*z;
    }
    printf("%d\n",r);
    return 0;
}