Pagini recente » Cod sursa (job #2626513) | Cod sursa (job #1765804) | Cod sursa (job #1808430) | Cod sursa (job #54317) | Cod sursa (job #585323)
Cod sursa(job #585323)
#include <fstream>
using namespace std;
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,minn,aux;
int main()
{
int i,j,k,z;
ifstream in("struti.in");
ofstream out("struti.out");
in>>n>>m>>t;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
in>>v[i][j];
for (i=1;i<=t;++i)
{
in>>a>>b;
z=0;minn=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]==minn)
++c;
else if (e[l2]-d[l1]<minn)
{
minn=e[l2]-d[l1];
c=1;
}
}
}
aux=a;a=b;b=aux;
}
out<<minn<<" "<<c<<"\n";
}
return 0;
}