RT #2#3WA,其余TLE,谢谢
#include <bits/stdc++.h>
using namespace std;
int a,b,n,m[1005][1005];
int q[1005],q1[1005],rmax[1005][1005],cmax[1005][1005],rmin[1005][1005],cmin[1005][1005];
int main(){
scanf("%d%d%d",&a,&b,&n);
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
scanf("%d",&m[i][j]);
}
}
for(int i=1;i<=a;i++){
int l=0,r=0;
for(int j=1;j<=b;j++){
while(l<=r&&q[l]+n<j)l++;
while(l<=r&&m[i][j]>m[i][q[r]])r--;
q[++r]=j;
if(j>=n)rmax[i][j-n+1]=m[i][q[l]];
}
l=0,r=0;
for(int j=1;j<=b;j++){
while(l<=r&&q[l]+n<j)l++;
while(l<=r&&m[i][j]<m[i][q[r]])r--;
q[++r]=j;
if(j>=n)rmin[i][j-n+1]=m[i][q[l]];
}
for(int j=1;j<=b-n+1;j++){
int l=0,r=0;
for(int k=1;k<=a;k++){
while(l<=r&&q[l]+n<k)l++;
while(l<=r&&rmax[k][j]>rmax[q[r]][j])r--;
q[++r]=k;
if(k>=n)cmax[k-n+1][j]=rmax[q[l]][j];
}
l=0,r=0;
for(int k=1;k<=a;k++){
while(l<=r&&q[l]+n<k)l++;
while(l<=r&&rmin[k][j]<rmin[q[r]][i])r--;
q[++r]=k;
if(k>=n)cmin[k-n+1][j]=rmin[q[l]][j];
}
}
}
int ans=0x3f3f3f3f;
for(int i=1;i<=a-n+1;i++){
for(int j=1;j<=b-n+1;j++){
//cout<<'('<<cmax[i][j]<<' '<<cmin[i][j]<<')';
ans=min(ans,cmax[i][j]-cmin[i][j]);
}
cout<<endl;
}
printf("%d",ans);
return 0;
}