Cod sursa(job #2657134)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 9 octombrie 2020 18:47:15
Problema Matrice 2 Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#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;
}