Cod sursa(job #2961590)

Utilizator Beverita2345Bretan Alexandru Beverita2345 Data 6 ianuarie 2023 18:52:47
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

#define dim 501
#define DIM 9


using namespace std;

ifstream in("plantatie.in");
ofstream out("plantatie.out");

int n, m;
int v[dim][dim], w[dim][dim][DIM];

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

int query(int x, int y, int val) {
    int ind = log2(val);
    return max(max(w[x][y][ind], w[x + val - (1 << ind)][y][ind]),
               max(w[x][y + val - (1 << ind)][ind], w[x + val - (1 << ind)][y + val - (1 << ind)][ind]));
}

int main() {

    in >> n >> m;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; ++j) {
            in >> v[i][j];
            w[i][j][0] = v[i][j];
        }
    }

    rmq();

    while (m--) {
        int x, y, val;
        in >> x >> y >> val;
        out << query(x, y, val) << '\n';
    }

    return 0;
}