Pagini recente » Cod sursa (job #1356123) | Cod sursa (job #1225130) | Cod sursa (job #2538993) | Cod sursa (job #3285446) | Cod sursa (job #1936891)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("struti.in");
ofstream fout ("struti.out");
int a,b,m,n,p,v[1002][1002],ma[1002][1002],minx=0xff,nr=0,mb[1002][1002],mc[1002][1002];
deque <int> D;
int deq(int w){
memset(ma,0,sizeof(ma));
for (int i=1;i<=m;++i){
while(!D.empty())D.pop_front();
for(int j=1;j<=n;++j){
if(w)
while(!D.empty() && D.back()>v[i][j])
D.pop_back();
else
while(!D.empty() && D.back()<v[i][j])
D.pop_back();
D.push_back(v[i][j]);
if(j>b && D.front()==v[i][j-b])
D.pop_front();
if(j>=b)
ma[i][j]=D.front();
}
}
return 1;
}
int deq1(int w, int vx[][1002]){
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
vx[i][j]=-1;
for (int i=1;i<=n;++i){
while(!D.empty())D.pop_front();
for(int j=1;j<=m;++j){
if(w)
while(!D.empty() && D.back()>ma[j][i])
D.pop_back();
else
while(!D.empty() && D.back()<ma[j][i])
D.pop_back();
D.push_back(ma[j][i]);
if(j>a && D.front()==ma[j-a][i])
D.pop_front();
if(j>=a && i>=b)
vx[j][i]=D.front();
}
}
return 1;
}
int main()
{
fin>>m>>n>>p;
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
fin>>v[i][j];
while(p--){
minx=0xff;
nr=0;
fin>>a>>b;
deq(1);
deq1(1,mb);
deq(0);
deq1(0,mc);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(mb[i][j]!=-1 && mc[i][j]!=-1)
if(mc[i][j]-mb[i][j]<minx){minx=mc[i][j]-mb[i][j];nr=1;}else if(mc[i][j]-mb[i][j]==minx){nr++;}
if(a!=b){
a^=b^=a^=b;
deq(1);
deq1(1,mb);
deq(0);
deq1(0,mc);
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
if(mb[i][j]!=-1 && mc[i][j]!=-1)
if(mc[i][j]-mb[i][j]<minx){minx=mc[i][j]-mb[i][j];nr=1;}else if(mc[i][j]-mb[i][j]==minx){nr++;}
}
fout<<minx<<' '<<nr<<'\n';
}
return 0;
}