Cod sursa(job #3270383)

Utilizator Carnu_EmilianCarnu Emilian Carnu_Emilian Data 23 ianuarie 2025 09:28:50
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("plantatie.in");
ofstream fcout("plantatie.out");

const int N = 505;
int rmq[9][N][N], n, m, e[N];

inline int query(int i, int j, int k)
{
    int p = e[k];
    int l = (1 << p);
    return max({rmq[p][i][j], rmq[p][i + k - l][j], rmq[p][i][j + k - l],
    rmq[p][i + k - l][j + k - l]});
}

int main()
{
    fcin >> n >> m;
    for (int i = 2; i < N; i++)
        e[i] = e[i / 2] + 1;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            fcin >> rmq[0][i][j];
    for (int p = 1; (1 << p) <= n; p++)
    {
        int x = 1 << (p - 1);
        for (int i = 1; i + x - 1 <= n; i++)
            for (int j = 1; j + x - 1 <= n; j++)
                rmq[p][i][j] = max({rmq[p - 1][i][j], rmq[p - 1][i + x][j],
                    rmq[p - 1][i][j + x], rmq[p - 1][i + x][j + x]
                });
    }
    while (m--)
    {
        int i, j, k;
        fcin >> i >> j >> k;
        fcout << query(i, j, k) << '\n';
    }
    return 0;
}