Cod sursa(job #2837053)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 21 ianuarie 2022 16:40:45
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>

#define DIM 501

using namespace std;

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

int maxOf(int a, int b, int c, int d)
{
    return max(max(a, b), max(c, d));
}

int r[9][DIM][DIM];
int e[DIM];

int main()
{
    int n, m;
    fin >> n >> m;
    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 *= 2)
        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] = maxOf(r[p - 1][i1][j1],
                                     r[p - 1][i2][j1],
                                     r[p - 1][i1][j2],
                                     r[p - 1][i2][j2]);
            }

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

    int x, y, l;
    for (int i = 1; i <= m; i++)
    {
        fin >> x >> y >> l;

        int exp = e[l];
        int pow = (1 << exp);
        int maxValue = maxOf(
                r[exp][x][y],
                r[exp][x + l - pow][y],
                r[exp][x][y + l - pow],
                r[exp][x + l - pow][y + l - pow]
                );

        fout << maxValue << '\n';
    }

    return 0;
}