#include <cstdio> #include <cmath> #include <cstring> #include <iostream> using namespace std; const int NN=301; int n,m,a[NN][NN],dp[NN][NN][9][9]; //内存卡得紧 inline void get(int &x) { char c=getchar(); while (c<'0' || c>'9') c=getchar(); x=c-'0'; c=getchar(); while (c>='0' && c<='9') x=x*10+c-'0',c=getchar(); } void RMQ_init() { for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) dp[i][j][0][0]=a[i][j]; int lim1=log(n)/log(2); int lim2=log(m)/log(2); for (int k1=0; k1<=lim1; k1++) for (int k2=0; k2<=lim2; k2++) if (k1+k2) for (int i=1; i<=n-(1<<k1)+1; i++) for (int j=1; j<=m-(1<<k2)+1; j++) { if (k2) dp[i][j][k1][k2]=max(dp[i][j][k1][k2-1],dp[i][j+(1<<(k2-1))][k1][k2-1]); else dp[i][j][k1][k2]=max(dp[i][j][k1-1][k2],dp[i+(1<<(k1-1))][j][k1-1][k2]); } } int RMQ(int x1,int y1,int x2,int y2) { int k1=log(x2-x1+1)/log(2); int k2=log(y2-y1+1)/log(2); int s1=max(dp[x1][y1][k1][k2],dp[x2-(1<<k1)+1][y2-(1<<k2)+1][k1][k2]); int s2=max(dp[x1][y2-(1<<k2)+1][k1][k2],dp[x2-(1<<k1)+1][y1][k1][k2]); return max(s1,s2); } int main() { int q,w,x1,y1,x2,y2; while (scanf("%d%d",&n,&m)==2) { for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) get(a[i][j]); RMQ_init(); scanf("%d",&q); while (q--) { get(x1); get(y1); get(x2); get(y2); w=RMQ(x1,y1,x2,y2); printf("%d ",w); if (a[x1][y1]==w || a[x2][y1]==w || a[x1][y2]==w || a[x2][y2]==w) printf("yes\n"); else printf("no\n"); } } return 0; }