|
- #include <cstdio>
- #include <algorithm>
- #include <iostream>
- #include <cmath>
- #include <cstring>
- #include <vector>
- using namespace std;
- int n,m,l,k,p,a[1010][1010],f[1010][1010][11]={0},g[1010][1010][11]={0};
- int main()
- {
- scanf("%d%d%d",&n,&m,&l);
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- {
- scanf("%d",&a[i][j]);
- f[i][j][0]=g[i][j][0]=a[i][j];
- }
- for(k=0,p=1;p+p<=l;p*=2,k++)
- for(int i=0;i+p+p<=n;i++)
- for(int j=0;j+p+p<=m;j++)
- f[i][j][k+1]=max(max(f[i][j][k],f[i+p][j][k]),max(f[i][j+p][k],f[i+p][j+p][k])),g[i][j][k+1]=min(min(g[i][j][k],g[i+p][j][k]),min(g[i][j+p][k],g[i+p][j+p][k]));
- int ans=999999999;
- for(int i=0;i+l<=n;i++)
- for(int j=0;j+l<=m;j++)
- {
- int x=i+l-p,y=j+l-p;
- int F=max(max(f[i][j][k],f[x][j][k]),max(f[i][y][k],f[x][y][k])),G=min(min(g[i][j][k],g[x][j][k]),min(g[i][y][k],g[x][y][k]));
- ans=min(ans,F-G);
- }
- printf("%d",ans);
- return 0;
- }
复制代码 |
|