Cod sursa(job #3366963)

Utilizator Belea_DariusBelea Mihai Darius Belea_Darius Data 5 octombrie 2026 15:14:24
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
#define MAXN 500
#define MAX_LOG 9

using namespace std;

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int mat[MAXN + 1][MAXN + 1], log_2[MAXN + 1], rmq[MAX_LOG + 1][MAXN + 1][MAXN + 1];

int max4(int a, int b, int c, int d) {
    return max(a, max(b, max(c, d)));
}

int main() {
    int n, m, e, i, j, k, p, rez;

    fin >> n >> m;
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            fin >> mat[i][j];
        }
    }

    log_2[1] = 0;
    for (i = 2; i <= n; i++) {
        log_2[i] = log_2[i / 2] + 1;
    }

    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            rmq[0][i][j] = mat[i][j];
        }
    }
    for (e = 1; e <= log_2[n]; e++) {
        p = (1 << (e - 1));
        for (i = 1; i <= n; i++) {
            for (j = 1; j <= n; j++) {
                rmq[e][i][j] = max4(rmq[e - 1][i][j], rmq[e - 1][i][j - p], rmq[e - 1][i - p][j], rmq[e - 1][i - p][j - p]);
            }
        }
    }
    while (m--) {
        fin >> i >> j >> k;

        i = i + k - 1;
        j = j + k - 1;
        e = log_2[k];
        p = (1 << e);
        rez = max4(rmq[e][i - k + p][j - k + p], rmq[e][i - k + p][j], rmq[e][i][j - k + p], rmq[e][i][j]);
        fout << rez << '\n';
    }
    return 0;
}