赏 4 关,下载不到数据,单调队列玄学错误 80pts
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
int x=0;bool f=1;register char c=getchar();
while (c<48||c>57){if(c=='-') f=0;c=getchar();}
while (c>=48&&c<=57){x=x*10+(c^48);c=getchar();}
return f?x:-x;
}
void quee(int a[],int ans[],int n,int m,int op){
deque<pair<int,int> >que;
for (int i=1;i<=n;i++){
pair<int,int>Pair(a[i],i);
if (!que.empty()) if (que.back().second<=i-m) que.pop_back();
while (1){
if (que.empty()) break;
if (op==2&&que.front().first>=a[i]) break;
if (op==1&&que.front().first<=a[i]) break;
que.pop_front();
}
que.push_front(Pair);
if (i>=m) ans[i-m+1]=que.back().first;
}
while (!que.empty()) que.pop_front();
}
int a=read(),b=read(),n=read(),sb=max(a,b),f[1005][1005],f1[1005][1005],f2[1005][1005],f3[1005][1005],f4[1005][1005],minn=1e18;
signed main(){
for (int i=1;i<=a;i++) for (int j=1;j<=b;j++) f[i][j]=read();
for (int i=1;i<=sb;i++) for (int j=1;j<=sb;j++) f1[i][j]=f3[i][j]=1e18,f2[i][j]=f4[i][j]=-1e18;
for (int i=1;i<=a;i++){
quee(f[i],f1[i],b,n,1);
quee(f[i],f2[i],b,n,2);
// for (int j=1;j<=b-n+1;j++) cout<<f1[i][j]<<','<<f2[i][j]<<' ';
// cout<<'\n';
}
for (int i=1;i<=a;i++){
// cout<<'\n';
for (int j=1;j<=b;j++){
if (i<j) swap(f1[i][j],f1[j][i]),swap(f2[i][j],f2[j][i]);
// if (f2[i][j]<=-1e18) continue;
// cout<<f1[i][j]<<','<<f2[i][j]<<' ';
}
}
// cout<<"\n\n";
for (int i=1;i<=b-n+1;i++){
quee(f1[i],f3[i],a,n,1);
quee(f2[i],f4[i],a,n,2);
}
for (int i=1;i<=a-n+1;i++){
// cout<<'\n';
for (int j=1;j<=b-n+1;j++){
// cout<<f3[i][j]<<','<<f4[i][j]<<' ';]
minn=min(minn,f4[i][j]-f3[i][j]);
}
}
cout<<minn;
return 0;
}