Pagini recente » Sport2 | Cod sursa (job #576821) | Cod sursa (job #393451) | Cod sursa (job #3156631) | Cod sursa (job #261697)
Cod sursa(job #261697)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1024
int v[MAXN][MAXN];
int mM[MAXN][MAXN];
//int mm[MAXN][MAXN];
int T[MAXN][MAXN];
int D[MAXN];
int M,N,P,m=0,r=0;
void chestie(int X, int Y)
{
int i,j,L=0,R=0,tt=0; m=-1; r=0;
for (j=1; j<=M; ++j)
{
L=1; R=0;
for (i=1; i<=N; ++i)
{
while (L <= R && v[i][j] >= v[ D[R] ][j]) --R;
D[++R] = i;
if (D[L] == i-X) ++L;
if (i >= X) T[i][j]=v[ D[L] ][j];
}
}
for (i=X; i<=N; ++i)
{
L=1; R=0;
for (j=1; j<=M; ++j)
{
while (L <= R && T[i][j] >= T[i][ D[R] ]) --R;
D[++R] = j;
if (D[L] == j-Y) ++L;
if (j >= Y) mM[i-X+1][j-Y+1]=T[i][ D[L] ];
}
}
for (j=1; j<=M; ++j)
{
L=1; R=0;
for (i=1; i<=N; ++i)
{
while (L <= R && v[i][j] <= v[ D[R] ][j]) --R;
D[++R] = i;
if (D[L] == i-X) ++L;
if (i >= X) T[i][j]=v[ D[L] ][j];
}
}
for (i=X; i<=N; ++i)
{
L=1; R=0;
for (j=1; j<=M; ++j)
{
while (L <= R && T[i][j] <= T[i][ D[R] ]) --R;
D[++R] = j;
if (D[L] == j-Y) ++L;
if (j >= Y)// mm[i-X+1][j-Y+1]=T[i][ D[L] ];
{
tt=mM[i-X+1][j-Y+1] - T[i][ D[L] ];
if (tt==m) r++;
if (m==-1 || tt<m) { r=1; m=tt; }
}
}
}
}
void citire()
{
int i,j,m2,r2,X,Y;
scanf("%d%d%d",&M,&N,&P);
for (i=1; i<=M; ++i)
for (j=1; j<=N; ++j)
scanf("%d",&v[i][j]);
for (i=0; i<P; ++i)
{
scanf("%d%d",&X,&Y);
chestie(X,Y); m2=m; r2=r;
if (X!=Y)
{
chestie(Y,X);
if (m2==m) r2+=r;
if (m2>m) { m2=m; r2=r;}
}
printf("%d %d\n",m2,r2);
}
}
int main()
{
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
citire();
fclose(stdin);
fclose(stdout);
return 0;
}