Pagini recente » Cod sursa (job #2970885) | Cod sursa (job #1564228) | Cod sursa (job #704363) | Cod sursa (job #2698452) | Cod sursa (job #428073)
Cod sursa(job #428073)
#include <cstdio>
#define infile "matrice2.in"
#define outfile "matrice2.out"
#define MaxN 324
int a[MaxN][MaxN];
int uz[MaxN][MaxN];
int dx[4]={0,0,1,-1}, dy[4]={1,-1,0,0};
int N,Q;
int x1,y1,x2,y2;
int st,dr,m,sol;
int X[MaxN*MaxN],Y[MaxN*MaxN];
int BF(int val)
{
int i,p=0,xi,yi,x,y,k;
for(i=1;i<=N;i++)
for(k=1;k<=N;k++)
uz[i][k]=0;
X[++p]=x1; Y[p]=y1;
uz[x1][y1]=1;
for(i=1;i<=p;i++)
{
xi=X[i]; yi=Y[i];
for(k=0;k<4;k++)
{
x=xi+dx[k]; y=yi+dy[k];
if(x>0 && y>0 && x<=N && y<=N && a[x][y]>=val && !uz[x][y])
{
X[++p]=x; Y[p]=y;
uz[x][y]=1;
if(x==x2 && y==y2)
return 1;
}
}
}
return 0;
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d%d",&N,&Q);
int i,j;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
scanf("%d",&a[i][j]);
for(;Q;Q--)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
st=1; dr=a[x1][y1]; sol=0;
while(st<=dr)
{
m=(st+dr)/2;
if(BF(m))
{
st=m+1;
sol=m;
}
else
dr=m-1;
}
printf("%d\n",sol);
}
fclose(stdin);
fclose(stdout);
return 0;
}