Pagini recente » Cod sursa (job #86002) | Cod sursa (job #1310328) | Cod sursa (job #2937191) | Cod sursa (job #215141) | Cod sursa (job #552823)
Cod sursa(job #552823)
#include <stdio.h>
int v[1024][1024],d[1024],e[1024],p[1024],q[1024],x[1024][1024],y[1024][1024],n,m,t,a,b,l1,l2,r1,r2,c,min,aux;
int main()
{
int i,j,k,z;
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d%d%d",&n,&m,&t);
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
scanf("%d",&v[i][j]);
for (i=1;i<=t;++i)
{
scanf("%d%d",&a,&b);
z=0;min=160001;
while (z<(a!=b)+1)
{
++z;
for (j=1;j<=n;++j)
{
l1=1;l2=1;r1=1;r2=1;p[1]=1;q[1]=1;
d[1]=v[j][1];e[1]=v[j][1];
for (k=2;k<b;++k)
{
while ((r1>0)&&(d[r1]>v[j][k])) --r1;
while ((r2>0)&&(e[r2]<v[j][k])) --r2;
++r1;++r2;p[r1]=k;q[r2]=k;
d[r1]=v[j][k];e[r2]=v[j][k];
}
for (k=b;k<=m;++k)
{
if (p[l1]==k-b) ++l1;
if (q[l2]==k-b) ++l2;
while ((r1>=l1)&&(d[r1]>v[j][k])) --r1;
while ((r2>=l2)&&(e[r2]<v[j][k])) --r2;
++r1;++r2;p[r1]=k;q[r2]=k;
d[r1]=v[j][k];e[r2]=v[j][k];
x[j][k]=d[l1];y[j][k]=e[l2];
}
}
for (j=b;j<=m;++j)
{
l1=1;l2=1;r1=1;r2=1;p[1]=1;q[1]=1;
d[1]=x[1][j];e[1]=y[1][j];
for (k=2;k<a;++k)
{
while ((r1>0)&&(d[r1]>x[k][j])) --r1;
while ((r2>0)&&(e[r2]<y[k][j])) --r2;
++r1;++r2;p[r1]=k;q[r2]=k;
d[r1]=x[k][j];e[r2]=y[k][j];
}
for (k=a;k<=n;++k)
{
if (p[l1]==k-a) ++l1;
if (q[l2]==k-a) ++l2;
while ((r1>=l1)&&(d[r1]>x[k][j])) --r1;
while ((r2>=l2)&&(e[r2]<y[k][j])) --r2;
++r1;++r2;p[r1]=k;q[r2]=k;
d[r1]=x[k][j];e[r2]=y[k][j];
if (e[l2]-d[l1]==min)
++c;
else if (e[l2]-d[l1]<min)
{
min=e[l2]-d[l1];
c=1;
}
}
}
aux=a;a=b;b=aux;
}
printf("%d %d\n",min,c);
}
return 0;
}