Pagini recente » Cod sursa (job #2272922) | Cod sursa (job #921690) | Cod sursa (job #2563580) | Cod sursa (job #2616831) | Cod sursa (job #2657134)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
int n, q, mat[305][305], elementMaxim;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
bool viz[305][305];
void dfs(int i, int j, int nr){
viz[i][j] = 1;
for (int k = 0; k < 4; ++k){
int ii = i + dx[k];
int jj = j + dy[k];
if (ii >= 1 && jj >= 1 && ii <= n && jj <= n && mat[ii][jj] >= nr && viz[ii][jj] == 0){
dfs(ii, jj, nr);
}
}
}
int main(){
fin >> n >> q;
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= n; ++j){
fin >> mat[i][j];
elementMaxim = max(elementMaxim, mat[i][j]);
}
}
while (q--){
int a, b, c, d;
fin >> a >> b >> c >> d;
int st = 1, dr = elementMaxim, ans;
while (st <= dr){
int mid = (st + dr) / 2;
memset(viz, 0, sizeof viz);
dfs(a, b, mid);
if (viz[c][d] == 1 && mat[a][b] >= mid){
ans = mid;
st = mid + 1;
}
else{
dr = mid - 1;
}
}
fout << ans << "\n";
}
fin.close();
fout.close();
return 0;
}