Cod sursa(job #1218401)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 10 august 2014 22:04:06
Problema Matrice 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("matrice.in","r");
FILE *g=fopen("matrice.out","w");
int v[305][305],n,q,maxim,st,dr,mijl,sol;
int x1,y1,x2,y2,k;

int x[305][305];
int lin[100000],col[10000],l,c,nr;


int main()
{int i,j;
fscanf(f,"%d %d",&n,&q);
for (i=1;i<=n;i++) for (j=1;j<=n;j++) {fscanf(f,"%d",&v[i][j]);}
while (q!=0)
{
fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
st=1;dr=v[x1][y1];
sol=0;
while (st<=dr) {mijl=(st+dr)>>1;
                nr=1;
                lin[1]=x1;
                col[1]=y1;
                k++;
                x[x1][y1]=k;
                i=1;
                while (i<=nr)
                        {l=lin[i];c=col[i];
                         if (v[l+1][c]>=mijl&&x[l+1][c]!=k) {nr++;
                                                             lin[nr]=l+1;
                                                             col[nr]=c;
                                                             x[l+1][c]=k;
                                                             }
                         if (v[l-1][c]>=mijl&&x[l-1][c]!=k) {nr++;
                                                             lin[nr]=l-1;
                                                             col[nr]=c;
                                                             x[l-1][c]=k;
                                                             }
                         if (v[l][c+1]>=mijl&&x[l][c+1]!=k) {nr++;
                                                             lin[nr]=l;
                                                             col[nr]=c+1;
                                                             x[l][c+1]=k;
                                                             }
                         if (v[l][c-1]>=mijl&&x[l][c-1]!=k) {nr++;
                                                             lin[nr]=l;
                                                             col[nr]=c-1;
                                                             x[l][c-1]=k;
                                                             }
                         ++i;}
                if (x[x2][y2]==k) {sol=mijl;
                                   st=mijl+1;
                                   }
                              else dr=mijl-1;

                }
fprintf(g,"%d\n",sol);
q--;}





return 0;
}