Cod sursa(job #3332727)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 8 ianuarie 2026 20:18:35
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>

using namespace std;

#define USE_STD_IO 0
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("plantatie.in");
    ofstream fout("plantatie.out");
#endif // USE_STD_IO

int n, q, i, j, l, lg[502];
int rmq[9][502][502];

static inline int Query(int i, int j, int lat) {
    int k = lg[lat];
    int add = lat - (1 << k);

    return max({
        rmq[k][i      ][j      ],
        rmq[k][i      ][j + add],
        rmq[k][i + add][j      ],
        rmq[k][i + add][j + add]
    });
}

int main() {
    if(USE_STD_IO) ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

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

    for(i = 2; i <= n; i++) lg[i] = 1 + lg[i >> 1];
    for(int limN, add, p = 1; p <= lg[n]; p++) {
        limN = n - (1 << p) + 1;
        add = (1 << (p - 1));
        for(i = 1; i <= limN; i++) {
            for(j = 1; j <= limN; j++) {
                rmq[p][i][j] = max({
                    rmq[p - 1][i      ][j      ],
                    rmq[p - 1][i      ][j + add],
                    rmq[p - 1][i + add][j      ],
                    rmq[p - 1][i + add][j + add]
                });
            }
        }
    }

    while(q--) {
        fin >> i >> j >> l;
        fout << Query(i, j, l) << "\n";
    }

    return 0;
}