Pagini recente » Cod sursa (job #1303444) | Cod sursa (job #121611) | Cod sursa (job #1335627) | Cod sursa (job #3220508) | Cod sursa (job #2216034)
#include <fstream>
using namespace std;
ifstream fin("struti.in");
ofstream fout("struti.out");
const int N=1000;
int n,m,q;
int v[N+5][N+5];
int best=(1<<30),cnt=0;
int deq[N+5],st,dr;
int v1[N+5][N+5];
int mi[N+5][N+5];
void slove(int a,int b) {
for(int j=1;j<=m;j++) {
st=1;
dr=0;
for(int i=1;i<=n;i++) {
while(st<=dr && v[i][j]<=v[deq[dr]][j])
dr--;
if(st<=dr && deq[st]<=i-a)
st++;
deq[++dr]=i;
v1[i][j]=v[deq[st]][j];
}
}
for(int i=a;i<=n;i++) {
st=1;
dr=0;
for(int j=1;j<=m;j++) {
while(st<=dr && v1[i][j]<=v1[i][deq[dr]])
dr--;
if(st<=dr && deq[st]<=j-b)
st++;
deq[++dr]=j;
mi[i][j]=v1[i][deq[st]];
}
}
for(int j=1;j<=m;j++) {
st=1;
dr=0;
for(int i=1;i<=n;i++) {
while(st<=dr && v[i][j]>=v[deq[dr]][j])
dr--;
if(st<=dr && deq[st]<=i-a)
st++;
deq[++dr]=i;
v1[i][j]=v[deq[st]][j];
}
}
for(int i=a;i<=n;i++) {
st=1;
dr=0;
for(int j=1;j<=m;j++) {
while(st<=dr && v1[i][j]>=v1[i][deq[dr]])
dr--;
if(st<=dr && deq[st]<=j-b)
st++;
deq[++dr]=j;
int ma=v1[i][deq[st]];
int dif=ma-mi[i][j];
if(j>=b) {
if(dif<best) {
best=dif;
cnt=0;
}
if(dif==best)
cnt++;
}
}
}
}
int main() {
fin>>n>>m>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fin>>v[i][j];
while(q--) {
int x,y;
fin>>x>>y;
best=(1<<30);
cnt=0;
slove(x,y);
if(x!=y)
slove(y,x);
fout<<best<<" "<<cnt<<"\n";
}
return 0;
}