C Program
#include<stdio.h>
#include<stdbool.h>
int A[309][309]; // mandatory
bool ok[309][309][309]; // mandatory
int max(int a,int b){return a>b?a:b;}
int main(){
int T;
scanf("%d",&T);
while(T--){
int R,C,L;
scanf("%d%d%d",&R,&C,&L);
int i,j,k;
for(i=0;i<R;i++)
for(j=0;j<C;j++)
scanf("%d",&A[i][j]);
// Step 1: precompute valid segments per row
for(i=0;i<R;i++){
for(j=0;j<C;j++){
int mn=A[i][j], mx=A[i][j];
for(k=j;k<C;k++){
if(A[i][k]<mn) mn=A[i][k];
if(A[i][k]>mx) mx=A[i][k];
ok[i][j][k] = (mx - mn <= L);
}
}
}
int ans = 0;
// Step 2: fix column range
for(j=0;j<C;j++){
for(k=j;k<C;k++){
int cnt = 0;
// Step 3: count consecutive valid rows
for(i=0;i<R;i++){
if(ok[i][j][k]){
cnt++;
ans = max(ans, cnt * (k - j + 1));
} else {
cnt = 0;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
0 Comments