Cod sursa(job #3297702)

Utilizator mateipiratulCocu Matei mateipiratul Data 23 mai 2025 15:36:53
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
// plantatie
#include <fstream>
#include <cmath>
#define is std::ifstream
#define os std::ofstream

int main() { // rmq - vector 3d
    is f("plantatie.in");
    os g("plantatie.out");
    int n, m;
    f >> n >> m;
    int log2n = log2(n) + 1;
    int p[n][n][log2n];

    for (int i = 0; i < n; ++i) // O(n^2)
        for (int j = 0; j < n; ++j)
            f >> p[i][j][0]; // 'matricea' initiala

    for (int u = 1; u < log2n; ++u) {
        int ind = 1 << u - 1;
        for (int s = 0; (s + ind) < n; ++s)  // precalculare
            for (int t = 0; (t + ind) < n; ++t)  // O(n^2logn)
                p[s][t][u] = std::max(
                    std::max(p[s][t][u - 1], p[s][t + ind][u - 1]),
                    std::max(p[s + ind][t][u - 1], p[s + ind][t + ind][u - 1])
                );
    }

    while(m-- > 0) {
        int i, j, k;
        f >> i >> j >> k;
        --i, --j; // indexare de la 0

        int l = log2(k);
        int ind = k - (1 << l);
        int r = std::max(
            std::max(p[i][j][l], p[i][j + ind][l]),
            std::max(p[i + ind][j][l], p[i + ind][j + ind][l])
        );

        g << r << '\n';
    }

    return 0;
}