Cod sursa(job #3231841)

Utilizator VladPislaruPislaru Vlad Rares VladPislaru Data 27 mai 2024 21:17:26
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;

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

const int MAX_N = 505;
const int MAX_LOG = 10;

int n, m;
int a[MAX_N][MAX_N][MAX_LOG];

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

    int lg = log2(n);
    for (int t = 1; t <= lg; ++t) {
        int dr = (1 << t);
        for (int i = 1; i + dr <= n + 1; ++i)
            for (int j = 1; j + dr <= n + 1; ++j)
                a[i][j][t] = max({
                    a[i][j][t - 1],
                    a[i][j + dr / 2][t - 1],
                    a[i + dr / 2][j][t - 1],
                    a[i + dr / 2][j + dr / 2][t - 1]
                });
    }

    for (int i = 1; i <= m; ++i) {
        int x, y, k;
        fin >> x >> y >> k;
        int lg = log2(k);
        int xf = x + k;
        int yf = y + k;
        int dr = (1 << lg);
        int v = max({
            a[x][y][lg],
            a[xf - dr][y][lg],
            a[xf - dr][yf - dr][lg],
            a[x][yf - dr][lg]
        });
        fout << v << '\n';
    }

    return 0;
}