Pagini recente » Cod sursa (job #2973912) | Cod sursa (job #2954575) | Cod sursa (job #1689433) | Cod sursa (job #722539) | Cod sursa (job #197131)
Cod sursa(job #197131)
#include<stdio.h>
#define NMAX 1000
int main(){
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
int a[NMAX][NMAX]={{0}},n,m,i,j,k,dx,dy,p,nro;
int nr,min,hmin,hmax,dc,min_mn,v[8001],lstart,cstart,ii,jj,sens,t;
scanf("%d%d%d",&m,&n,&p);
if(m<=n) min_mn=m;else min_mn=n;
for(i=0;i<m;++i)
for(j=0;j<n;++j)
scanf("%d",&a[i][j]);
for(nro=0;nro<p;++nro){
scanf("%d%d",&dx,&dy);
min=0;nr=0;sens=0;
min=8000;nr=0;
//pe unsens
again:
for(i=0;i<=8000;++i) v[i]=0;
hmin=hmax=a[0][0];
for(i=0;i<dx;++i)
for(j=0;j<dy;++j){
v[a[i][j]]++;
if(hmin>a[i][j]) hmin=a[i][j];
if(hmax<a[i][j]) hmax=a[i][j];
}
dc=hmax-hmin;
if(min>dc) {min=dc;nr=1;}
else if(min==dc) nr++;
for(i=dx-1;i<m;++i){
lstart=i-dx+1;
if(lstart){
for(k=0;k<dy;++k) v[a[lstart-1][k]]--;
if(v[hmin]==0){
ii=hmin+1;
while(v[ii]==0) ii++;
hmin=ii;
}
if(v[hmax]==0){
jj=hmax-1;
while(v[jj]==0) jj--;
hmax=jj;
}
for(k=0;k<dy;++k) {
v[a[i][k]]++;
if(hmin>a[i][k]) hmin=a[i][k];
if(hmax<a[i][k]) hmax=a[i][k];
}
dc=hmax-hmin;
if(dc<min){min=dc;nr=1;}
else if(dc==min) nr++;
}
for(j=dy;j<n;++j){
cstart=j-dy;
for(k=lstart;k<=i;++k) v[a[k][cstart]]--;
if(v[hmin]==0){
ii=hmin+1;
while(v[ii]==0) ii++;
hmin=ii;
}
if(v[hmax]==0){
jj=hmax-1;
while(v[jj]==0) jj--;
hmax=jj;
}
for(k=lstart;k<=i;++k) {
v[a[k][j]]++;
if(hmin>a[k][j]) hmin=a[k][j];
if(hmax<a[k][j]) hmax=a[k][j];
}
dc=hmax-hmin;
if(dc<min){min=dc;nr=1;}
else if(dc==min) nr++;
}
}
if(sens==0){t=dx;dx=dy;dy=t;sens=1;goto again;}
printf("%d %d\n",min,nr);
}
return 0;
}