Pagini recente » Cod sursa (job #1481630) | Cod sursa (job #2576516) | Cod sursa (job #2446516) | Cod sursa (job #723147) | Cod sursa (job #569618)
Cod sursa(job #569618)
#include<fstream>
using namespace std;
#define dim 1001
ifstream fi("struti.in");
ofstream fo("struti.out");
int l1,l2,f1,f2,nr,minim,a[dim][dim],b[dim][dim],d1[dim],d2[dim],n,m,k,i,j,x,y,c[dim][dim];
int main(){
fi>>n>>m>>k;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
fi>>a[i][j];
for(i=1;i<=n;++i)
b[i][1]=c[i][1]=a[i][1];
for(int o=1;o<=k;++o){
fi>>x>>y;
nr=0;
minim=9000;
for(i=1;i<=n;++i){
d1[1]=d2[1]=l1=l2=f1=f2=1;
for(j=2;j<=m;++j){
while(l1>=f1&&a[i][d1[l1]]>=a[i][j])
l1--;
d1[++l1]=j;
while(d1[f1]+x<=j)
f1++;
while(l2>=f2&&a[i][d2[l2]]<=a[i][j])
l2--;
d2[++l2]=j;
while(d2[f2]+x<=j)
f2++;
b[i][j]=a[i][d2[f2]];
c[i][j]=a[i][d1[f1]];
}
}
for(j=x;j<=m;++j){
d2[1]=l2=f2=d1[1]=l1=f1=1;
for(i=2;i<=n;++i){
while(l1>=f1&&c[d1[l1]][j]>=c[i][j])
l1--;
d1[++l1]=i;
while(d1[f1]+y<=i)
f1++;
while(l2>=f2&&b[d2[l2]][j]<=b[i][j])
l2--;
d2[++l2]=i;
while(d2[f2]+y<=i)
f2++;
if(i>=y)
if(minim>b[d2[f2]][j]-c[d1[f1]][j]){
minim=b[d2[f2]][j]-c[d1[f1]][j];
nr=1;
}else if(minim==b[d2[f2]][j]-c[d1[f1]][j])
nr++;
}
}
if(x!=y){
for(i=1;i<=n;++i){
d1[1]=d2[1]=l1=l2=f1=f2=1;
for(j=2;j<=m;++j){
while(l1>=f1&&a[i][d1[l1]]>=a[i][j])
l1--;
d1[++l1]=j;
while(d1[f1]+y<=j)
f1++;
while(l2>=f2&&a[i][d2[l2]]<=a[i][j])
l2--;
d2[++l2]=j;
while(d2[f2]+y<=j)
f2++;
b[i][j]=a[i][d2[f2]];
c[i][j]=a[i][d1[f1]];
}
}
for(j=y;j<=m;++j){
d2[1]=l2=f2=d1[1]=l1=f1=1;
for(i=2;i<=n;++i){
while(l1>=f1&&c[d1[l1]][j]>=c[i][j])
l1--;
d1[++l1]=i;
while(d1[f1]+x<=i)
f1++;
while(l2>=f2&&b[d2[l2]][j]<=b[i][j])
l2--;
d2[++l2]=i;
while(d2[f2]+x<=i)
f2++;
if(i>=x)
if(minim>b[d2[f2]][j]-c[d1[f1]][j]){
minim=b[d2[f2]][j]-c[d1[f1]][j];
nr=1;
}else if(minim==b[d2[f2]][j]-c[d1[f1]][j])
nr++;
}
}
}
fo<<minim<<' '<<nr<<'\n';
}
fo.close();
fi.close();
return 0;
}