Cod sursa(job #3175422)

Utilizator sebuxSebastian sebux Data 25 noiembrie 2023 19:35:21
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 502;
int r[10][nmax][nmax];

void rmq2d(int n)
{
    int x;
    for (int i = 1; i <= n; ++i) 
        for (int j = 1; j <= n; ++j)
            fin >> r[0][i][j];

    for (int p = 1, lat = 2; lat <= n; ++p, lat <<= 1)
    {
        for (int i1 = 1; i1 <= n - lat + 1; ++i1)
        {
            for (int j1 = 1; j1 <= n - lat + 1; ++j1)
            {
                int i2 = i1 + (lat >> 1);
                int j2 = j1 + (lat >> 1);
                r[p][i1][j1] = max(
                    max(r[p - 1][i1][j1], r[p - 1][i1][j2]),
                    max(r[p - 1][i2][j1], r[p - 1][i2][j2]));
            }
        }
    }
}

int query(int i1, int j1, int L)
{
    int e = log2(L);
    int len = 1 << e;
    int i2 = i1 + L - len;
    int j2 = j1 + L - len;
    return max(max(r[e][i1][j1], r[e][i1][j2]), max(r[e][i2][j1], r[e][i2][j2]));
}

int main()
{
    int n, m;
    fin >> n >> m;
    rmq2d(n);
    int a, b, l;
    while (m--)
    {
        fin >> a >> b >> l;
        fout << query(a, b, l) << '\n';
    }

    return 0;
}