Pagini recente » Cod sursa (job #1554317) | Cod sursa (job #276638) | Cod sursa (job #2150771) | Cod sursa (job #637640) | Cod sursa (job #1558189)
#include <stdio.h>
#include <stdlib.h>
short amin_dx[1001][1001],bmin_dx[1001][1001],amin_dy[1001][1001],bmin_dy[1001][1001],v[1001][1001],amax_dx[1001][1001],bmax_dx[1001][1001],amax_dy[1001][1001],bmax_dy[1001][1001],f[1001][1001];
short stiva[1001];
int main()
{
int n,m,p,i,j,k,dx,dy,l,u,dif,nr;
freopen("struti.in","r",stdin);
freopen("struti.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
scanf("%d",&v[i][j]);
for(k=1; k<=p; k++)
{
scanf("%d%d",&dx,&dy);
//min
for(l=1; l<=n; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dx; j++)
{
while(u>0 && v[l][j]<=v[l][stiva[u]])
u--;
stiva[++u]=j;
}
p=1;
i=2;
amin_dx[l][dx]=v[l][stiva[p]];
while(j<=m)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && v[l][j]<=v[l][stiva[u]])
u--;
stiva[++u]=j;
amin_dx[l][j]=v[l][stiva[p]];
i++;
j++;
}
}
for(l=1; l<=n; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dy; j++)
{
while(u>0 && v[l][j]<=v[l][stiva[u]])
u--;
stiva[++u]=j;
}
p=1;
i=2;
amin_dy[l][dy]=v[l][stiva[p]];
while(j<=m)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && v[l][j]<=v[l][stiva[u]])
u--;
stiva[++u]=j;
amin_dy[l][j]=v[l][stiva[p]];
i++;
j++;
}
}
for(l=dx; l<=m; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dy; j++)
{
while(u>0 && amin_dx[j][l]<=amin_dx[stiva[u]][l])
u--;
stiva[++u]=j;
}
p=1;
i=2;
bmin_dy[dy][l]=amin_dx[stiva[p]][l];
while(j<=n)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && amin_dx[j][l]<=amin_dx[stiva[u]][l])
u--;
stiva[++u]=j;
bmin_dy[j][l]=amin_dx[stiva[p]][l];
i++;
j++;
}
}
for(l=dy; l<=m; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dx; j++)
{
while(u>0 && amin_dy[j][l]<=amin_dy[stiva[u]][l])
u--;
stiva[++u]=j;
}
p=1;
i=2;
bmin_dx[dx][l]=amin_dy[stiva[p]][l];
while(j<=n)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && amin_dy[j][l]<=amin_dy[stiva[u]][l])
u--;
stiva[++u]=j;
bmin_dx[j][l]=amin_dy[stiva[p]][l];
i++;
j++;
}
}
//max
for(l=1; l<=n; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dx; j++)
{
while(u>0 && v[l][j]>=v[l][stiva[u]])
u--;
stiva[++u]=j;
}
p=1;
i=2;
amax_dx[l][dx]=v[l][stiva[p]];
while(j<=m)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && v[l][j]>=v[l][stiva[u]])
u--;
stiva[++u]=j;
amax_dx[l][j]=v[l][stiva[p]];
i++;
j++;
}
}
for(l=1; l<=n; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dy; j++)
{
while(u>0 && v[l][j]>=v[l][stiva[u]])
u--;
stiva[++u]=j;
}
p=1;
i=2;
amax_dy[l][dy]=v[l][stiva[p]];
while(j<=m)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && v[l][j]>=v[l][stiva[u]])
u--;
stiva[++u]=j;
amax_dy[l][j]=v[l][stiva[p]];
i++;
j++;
}
}
for(l=dx; l<=m; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dy; j++)
{
while(u>0 && amax_dx[j][l]>=amax_dx[stiva[u]][l])
u--;
stiva[++u]=j;
}
p=1;
i=2;
bmax_dy[dy][l]=amax_dx[stiva[p]][l];
while(j<=n)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && amax_dx[j][l]>=amax_dx[stiva[u]][l])
u--;
stiva[++u]=j;
bmax_dy[j][l]=amax_dx[stiva[p]][l];
i++;
j++;
}
}
for(l=dy; l<=m; l++)
{
stiva[1]=1;
u=1;
for(j=1; j<=dx; j++)
{
while(u>0 && amax_dy[j][l]>=amax_dy[stiva[u]][l])
u--;
stiva[++u]=j;
}
p=1;
i=2;
bmax_dx[dx][l]=amax_dy[stiva[p]][l];
while(j<=n)
{
while(u>=p && stiva[p]<i)
p++;
while(u>=p && amax_dy[j][l]>=amax_dy[stiva[u]][l])
u--;
stiva[++u]=j;
bmax_dx[j][l]=amax_dy[stiva[p]][l];
i++;
j++;
}
}
dif=8001;
nr=0;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++){
if(i>=dx && j>=dy && bmax_dx[i][j]-bmin_dx[i][j]<dif)
{
dif=bmax_dx[i][j]-bmin_dx[i][j];
nr=1;
if(dx==dy)
f[i][j]=1;
}
else
if(i>=dx && j>=dy && bmax_dx[i][j]-bmin_dx[i][j]==dif)
nr++,f[i][j]=1;
if(i>=dy && j>=dx && bmax_dy[i][j]-bmin_dy[i][j]<dif && !f[i][j])
{
dif=bmax_dy[i][j]-bmin_dy[i][j];
nr=1;
}
else
if(i>=dy && j>=dx && bmax_dy[i][j]-bmin_dy[i][j]==dif && !f[i][j])
nr++;
}
printf("%d %d\n",dif,nr);
}
return 0;
}