Cod sursa(job #3328388)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 8 decembrie 2025 12:41:16
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int LMAX = 9;
const int NMAX = 501;
int rmq[LMAX][NMAX][NMAX], lg[NMAX];

int query(int x, int y, int l)
{
    int i = lg[l];
    int X = x + l - (1 << i), Y = y + l - (1 << i);
    return max({rmq[i][x][y], rmq[i][X][y], rmq[i][x][Y], rmq[i][X][Y]});
}

int main()
{
    int n, m, k;
    fin >> n >> m;

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

    for (int i = 2; i <= n; ++i)
        lg[i] = lg[i >> 1] + 1;

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

    int l, x, y;
    while (m--)
    {
        fin >> x >> y >> l;
        fout << query(x, y, l) << '\n';
    }

    return 0;
}