Cod sursa(job #3121856)

Utilizator AlexandruPlesescuAlexandru Plesescu AlexandruPlesescu Data 15 aprilie 2023 18:58:59
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>

#define NMAX 505
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");

int n, m, i1, i2, j2, lat, e[NMAX], r[10][NMAX][NMAX], len, jj;

int main() {
    ios_base::sync_with_stdio(false);
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            cin >> r[0][i][j];
    for (int p = 1, lat = 2; lat <= n; p++, lat *= 2) {
        for (int i1 = 1; i1 <= n - lat + 1; i1++) {
            for (int j1 = 1; j1 <= n - lat + 1; j1++) {
                r[p][i1][j1] = max(max(r[p - 1][i1][j1], r[p - 1][i1 + (1 << (p - 1))][j1]),
                                   max(r[p - 1][i1][j1 + (1 << (p - 1))],
                                       r[p - 1][i1 + (1 << (p - 1))][j1 + (1 << (p - 1))]));
            }
        }
    }
    e[1] = 0;
    for (int i = 2; i <= n; i++) {
        e[i] = 1 + e[i / 2];
    }
    for (int i = 1; i <= m; i++) {
        cin >> i1 >> jj >> lat;
        len = (1 << e[lat]);
        i2 = i1 + lat - len;
        j2 = jj + lat - len;
        cout << max(max(r[e[lat]][i1][jj], r[e[lat]][i1][j2]), max(r[e[lat]][i2][jj], r[e[lat]][i2][j2])) << '\n';
    }
    return 0;
}