Pagini recente » Cod sursa (job #547083) | Cod sursa (job #139315) | Cod sursa (job #1083657) | Cod sursa (job #2257572) | Cod sursa (job #36615)
Cod sursa(job #36615)
# include <stdio.h>
# define _fin "struti.in"
# define _fout "struti.out"
# define maxn 1001
short int a[maxn][maxn], n, m, p,
minl[maxn][maxn], minc[maxn][maxn],
maxl[maxn][maxn], maxc[maxn][maxn];
int l[maxn], h, t;
void insmin(int x) { while ( t >= h && l[t]>x ) --t; l[++t] = x; }
void insmax(int x) { while ( t >= h && l[t]<x ) --t; l[++t] = x; }
inline void del() { if ( ++h > t ) h=1, t=0; }
inline int head() { return l[h]; }
inline void init() { h=1, t=0; }
void readf()
{
freopen(_fin, "r", stdin);
int i, j;
for (scanf("%d%d%d", &n, &m, &p), i=1; i<=n; i++)
for (j=1; j<=m; j++) scanf("%d", &a[i][j]);
}
int dmin, cnt;
void solvet(int dx, int dy)
{
int i, j;
// aflu minimul
// linii
for (i=1; i<=n; i++)
{
init();
for (j=1; j<=dx; j++) insmin(a[i][j]);
minl[i][1] = head();
for (; j<=m; j++)
{
if ( a[i][j-dx]==head() ) del();
insmin(a[i][j]);
minl[i][j-dx+1]=head();
}
}
// coloane
for (i=1; i<=m-dx+1; i++)
{
init();
for (j=1; j<=dy; j++) insmin(minl[j][i]);
minc[1][i] = head();
for (; j<=n; j++)
{
if ( minl[j-dy][i]==head() ) del();
insmin(minl[j][i]);
minc[j-dy+1][i]=head();
}
}
for (i=1; i<=n; i++)
{
init();
for (j=1; j<=dx; j++) insmax(a[i][j]);
maxl[i][1] = head();
for (; j<=m; j++)
{
if ( a[i][j-dx]==head() ) del();
insmax(a[i][j]);
maxl[i][j-dx+1]=head();
}
}
// coloane
for (i=1; i<=m-dx+1; i++)
{
init();
for (j=1; j<=dy; j++) insmax(maxl[j][i]);
maxc[1][i] = head();
for (; j<=n; j++)
{
if ( maxl[j-dy][i]==head() ) del();
insmax(maxl[j][i]);
maxc[j-dy+1][i]=head();
}
}
for (i=1; i<=n-dy+1; i++)
for (j=1; j<=m-dx+1; j++)
if ( maxc[i][j]-minc[i][j] < dmin ) dmin=maxc[i][j]-minc[i][j], cnt=1;
else if ( maxc[i][j]-minc[i][j]==dmin ) ++cnt;
}
int main()
{
readf();
freopen(_fout, "w", stdout);
int i, dx, dy;
for (i=1; i<=p; i++)
{
scanf("%d%d", &dx, &dy);
dmin=27000, cnt=0;
solvet(dx, dy);
if ( dx != dy ) solvet(dy, dx);
printf("%d %d\n", dmin, cnt);
}
return 0;
}