Cod sursa(job #3158477)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 18 octombrie 2023 19:48:13
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 505;
int n, q;
int rmq[NMAX][NMAX][10];

void generare() {
    for (int p = 1; p <= 9; p++) {
        for (int i = n - (1 << p) + 1; i >= 1; i--) {
            for (int j = n - (1 << p) + 1; j >= 1; j--) {
                int l = (1 << (p - 1));
                rmq[i][j][p] = max(max(rmq[i + l][j][p - 1], rmq[i][j + l][p - 1]), max(rmq[i + l][j + l][ p - 1], rmq[i][j][p - 1]));
            }
        }
    }
}

int main() {

    fin >> n >> q;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++)
            fin >> rmq[i][j][0];
    }

    generare();

    while (q--) {
        int i, j, k;
        fin >> i >> j >> k;

        int p = 0;
        while ((1 << (p + 1)) <= k)
            p++;

        int l = (1 << p);
        int i1 = i + k - l, j1 = j + k - l;
        int res = max(max(rmq[i][j][p], rmq[i1][j][p]), max(rmq[i][j1][p], rmq[i1][j1][p]));
        fout << res << '\n';
    }

    return 0;
}