Cod sursa(job #2602865)

Utilizator bontovicspalPal Juhasz bontovicspal Data 18 aprilie 2020 00:22:00
Problema Plantatie Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>


int n, t, v[100][100], rmq[9][505][505], log2[505], i, j, k;


int main() {

    std::ifstream fin("plantatie.in");

    std::ofstream fout("plantatie.out");

    fin >> n >> t;

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            fin >> rmq[0][i][j];

        }

    }

    for (int k = 1; (1 << k) <= n; k++) {

        for (int i = 0; i < n - (1 << k) + 1; i++) {

            for (int j = 0; j < n - (1 << k) + 1; j++) {

                rmq[k][i][j] = std::max(std::max(rmq[k - 1][i][j], rmq[k - 1][i + (1 << k - 1)][j]),
                                        std::max(rmq[k - 1][i][j + (1 << k - 1)],
                                                 rmq[k - 1][i + (1 << k - 1)][j + (1 << k - 1)]));

            }

        }

    }

    for (int i = 2; i < n; i++) {

        log2[i] = log2[i / 2] + 1;

    }

    while (t--) {

        fin >> i >> j >> k;
        i--;
        j--;

        fout << std::max(std::max(rmq[log2[k]][i][j], rmq[log2[k]][i + k - (1 << log2[k])][j + k - (1 << log2[k])]),
                         std::max(rmq[log2[k]][i][j + k - (1 << log2[k])], rmq[log2[k]][i + k - (1 << log2[k])][j]))
             << '\n';

    }

    return 0;

}