给出一个N
*N (N<=250)的方阵,以及K(<=
100000)个询问。每次询问如下:以(Xi
,Yi)为左上角,边长为B的子方阵中,最大值和最小值的差是多少?
Output
Sample Input
Sample Output
注意对于所有的询问,B都是一个定值。
Input第一行N,B(<=N),K。含义如上。
接下来N行N列的一个矩阵,每个数<=250。
接下来K行表示询问,每行两个数Xi, Yi 表示询问的方阵的左上角。
一行一个正整数,含义如上。
5 3 1 5 1 2 6 3 1 3 5 2 7 7 2 4 6 1 9 9 8 6 5 0 6 9 3 9 1 2
5
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #define inf 0x3f3f3f3f using namespace std; int main() { int n,m,k,x,y; int a[260][260]; scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&a[i][j]); } } while(k--) { scanf("%d %d",&x,&y); int minx=a[x][y],maxx=a[x][y]; for(int i=x;i<x+m;i++) { for(int j=y;j<y+m;j++) { if(maxx<a[i][j]) maxx=a[i][j]; if(minx>a[i][j]) minx=a[i][j]; } } printf("%d\n",maxx-minx); } return 0; }