Cod sursa(job #3266992)

Utilizator Andercau_VasileAndercau Vasile Andercau_Vasile Data 10 ianuarie 2025 21:52:56
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

#define NMAX 505

int dp[10][NMAX][NMAX];
int log2[NMAX];

int main() {
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            fin >> dp[0][i][j];
        }
    }

    for (int k = 1; (1 << k) <= n; ++k) {
        for (int i1 = 1; i1 + (1 << k) - 1 <= n; ++i1) {
            for (int j1 = 1; j1 + (1 << k) - 1 <= n; ++j1) {
                int i2 = i1 + (1 << (k - 1));
                int j2 = j1 + (1 << (k - 1));

                dp[k][i1][j1] = max({dp[k - 1][i1][j1], dp[k - 1][i2][j1], dp[k - 1][i1][j2], dp[k - 1][i2][j2]});
            }
        }
    }

    log2[1] = 0;
    for (int i = 2; i <= n; ++i) {
        log2[i] = log2[i / 2] + 1;
    }

    while (m--) {
        int i1, j1, k;
        fin >> i1 >> j1 >> k;

        int log = log2[k];
        int i2 = i1 + k - (1 << log);
        int j2 = j1 + k - (1 << log);

        fout << max({dp[log][i1][j1], dp[log][i2][j1], dp[log][i1][j2], dp[log][i2][j2]}) << '\n';
    }
    return 0;
}