Pagini recente » Cod sursa (job #325348) | Cod sursa (job #2889625) | Cod sursa (job #2466241) | Cod sursa (job #1767862) | Cod sursa (job #394372)
Cod sursa(job #394372)
#include <cstdio>
#define LMAX 1010
int M, N, P, V[LMAX][LMAX], dmax[LMAX], dmin[LMAX], Max[LMAX][LMAX], Min[LMAX][LMAX], R[LMAX][LMAX];
int sol, count, dx, dy;
void solve()
{
int 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;
R[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;
R[i][j]-=Min[dmin[stmin]][j];
}
}
}
void calc()
{
int i, j;
for (i=dx; i<=M; i++)
for (j=dy; j<=N; j++)
if (R[i][j]<sol)
{
sol=R[i][j];
count=1;
} else
if (R[i][j]==sol) count++;
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d %d %d",&M, &N, &P);
int 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);
}
}