Pagini recente » Cod sursa (job #91207) | Cod sursa (job #996050) | Cod sursa (job #2803430) | Cod sursa (job #948268) | Cod sursa (job #394348)
Cod sursa(job #394348)
#include <cstdio>
#define LMAX 1010
short M, N, P, V[LMAX][LMAX], dmax[LMAX], dmin[LMAX], Max[LMAX][LMAX], Min[LMAX][LMAX], MMax[LMAX][LMAX], MMin[LMAX][LMAX];
short sol, count, dx, dy;
void solve()
{
short i, j, stmax, stmin, hmax, hmin;
for (i=1; i<=M; i++)
{
stmax=stmin=1;
hmax=hmin=0;
for (j=1; j<=N; j++)
{
for (; dmax[stmax]+dy-1<j && stmax<=hmax; stmax++);
for (; V[i][j]>=V[i][dmax[hmax]] && hmax>=stmax; hmax--);
hmax++;
dmax[hmax]=j;
Max[i][j]=V[i][dmax[stmax]];
for (; dmin[stmin]+dy-1<j && stmin<=hmin; stmin++);
for (; V[i][j]<=V[i][dmin[hmin]] && hmin>=stmin; hmin--);
hmin++;
dmin[hmin]=j;
Min[i][j]=V[i][dmin[stmin]];
}
}
for (j=1; j<=N; j++)
{
stmax=stmin=1;
hmax=hmin=0;
for (i=1; i<=M; i++)
{
for (; dmax[stmax]+dx-1<i && stmax<=hmax; stmax++);
for (; Max[i][j]>=Max[dmax[hmax]][j] && hmax>=stmax; hmax--);
hmax++;
dmax[hmax]=i;
MMax[i][j]=Max[dmax[stmax]][j];
for (; dmin[stmin]+dx-1<i && stmin<=hmin; stmin++);
for (; Min[i][j]<=Min[dmin[hmin]][j] && hmin>=stmin; hmin--);
hmin++;
dmin[hmin]=i;
MMin[i][j]=Min[dmin[stmin]][j];
}
}
}
void calc()
{
short i, j;
for (i=dx; i<=M; i++)
for (j=dy; j<=N; j++)
if (MMax[i][j]-MMin[i][j]<sol)
{
sol=MMax[i][j]-MMin[i][j];
count=1;
} else
if (MMax[i][j]-MMin[i][j]==sol) count++;
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d %d %d",&M, &N, &P);
short i, j;
for (i=1; i<=M; i++)
for (j=1; j<=N; j++) scanf("%d",&V[i][j]);
while (P--)
{
scanf("%d %d",&dx,&dy);
solve();
sol=9000;
count=0;
calc();
if (dx!=dy)
{
i=dx;
dx=dy;
dy=i;
solve();
calc();
}
printf("%d %d\n",sol,count);
}
}