Cod sursa(job #3327716)

Utilizator NeamtuMateiNeamtu Matei-Constantin NeamtuMatei Data 4 decembrie 2025 21:07:11
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

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

const int MAXN = 500;
const int MAXL = 9; // 2^9 = 512 > 500

int n, queries, x, y, l;
int lg2[MAXN+1];
int rmq[MAXL][MAXN+1][MAXN+1];

int main() {
    in >> n >> queries;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            in >> rmq[0][i][j];

    lg2[1] = 0;
    for (int i = 2; i <= n; i++)
        lg2[i] = lg2[i / 2] + 1;

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

    for (int i = 1; i <= queries; i++) {
        in >> x >> y >> l;

        int lgk = lg2[l];
        out << max({
            rmq[lgk][x][y],
            rmq[lgk][x + l - (1 << lgk)][y],
            rmq[lgk][x][y + l - (1 << lgk)],
            rmq[lgk][x + l - (1 << lgk)][y + l - (1 << lgk)]
        }) << '\n';
    }

    return 0;
}