Cod sursa(job #3304229)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 21 iulie 2025 22:53:09
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>

using namespace std;

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

int rmq[10][502][502], lg[502];
int n, mi, q, p, i, j, k;

static inline void Precalc() {}
static inline void Test(int testCur = 0) {
    fin >> n >> q;

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

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

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

    while(q--) {
        fin >> i >> j >> k;

        int lung = (1 << lg[k]) - 1;

        int ii = (i + k - 1) - lung;
        int jj = (j + k - 1) - lung;

        int rasp = max({
            rmq[lg[k]][i ][j ],
            rmq[lg[k]][ii][j ],
            rmq[lg[k]][i ][jj],
            rmq[lg[k]][ii][jj]
        });
        fout << rasp << "\n";
    }
}

int main() {
    if(ST_DIO) ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    Precalc();
    int t = 1;
    //fin >> t;
    for(int i = 1; i <= t; i++) Test(i);

    return 0;
}