Cod sursa(job #2452859)

Utilizator IulianOleniucIulian Oleniuc IulianOleniuc Data 1 septembrie 2019 14:52:40
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, q;
int dp[10][510][510];

int max(int x, int y, int z, int t) {
    return max(max(x, y), max(z, t));
}

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

    for (int log = 1; log < 10; log++)
        for (int i = 1; i + (1 << log) <= n + 1; i++)
            for (int j = 1; j + (1 << log) <= n + 1; j++) {
                int pwr = (1 << (log - 1));
                dp[log][i][j] = max(
                    dp[log - 1][i][j],
                    dp[log - 1][i + pwr][j],
                    dp[log - 1][i][j + pwr],
                    dp[log - 1][i + pwr][j + pwr]
                );
            }

    for (int i = 0; i < q; i++) {
        int x, y, len;
        fin >> x >> y >> len;

        int log = log2(len), pwr = (1 << log);
        fout << max(
            dp[log][x][y],
            dp[log][x + len - pwr][y],
            dp[log][x][y + len - pwr],
            dp[log][x + len - pwr][y + len - pwr]
        ) << '\n';
    }

    fout.close();
    return 0;
}