Cod sursa(job #3366971)

Utilizator Tudor......Marin Diu Tudor Tudor...... Data 5 octombrie 2026 15:38:46
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
#define NM 501
int v[NM][NM], rmq[10][NM][NM], l2[NM];
int maxim(int a, int b, int c, int d) {
    return max(a, max(b, max(c, d)));
}
int main() {
    int n, m, i, j, k, p, e, nr;
    in >> n >> m;
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            in >> v[i][j];
            rmq[0][i][j] = v[i][j];
        }
    }
    for (i = 1; (1 << i) <= n;i++) {
        for (j = 1; j <= n; j++) {
            for (k = 1; k <= n; k++) {
                p = 1 << (i - 1);
                rmq[i][j][k] = maxim(rmq[i - 1][j - p][k - p],rmq[i - 1][j - p][k], rmq[i - 1][j][k - p], rmq[i - 1][j][k]);
            }
        }
    }
    for (i = 1;i <= n;i++) {
        l2[i] = l2[i >> 1] + 1;
    }
    while (m--) {
        in >> i >> j >> k;
        i += k - 1;
        j += k - 1;
        e = l2[k];
        p = 1 << e;
        nr = p - k;
        out << maxim(rmq[e][i + nr][j + nr], rmq[e][i + nr][j], rmq[e][i][j + nr], rmq[e][i][j]) << endl;
    }
    return 0;
}