Cod sursa(job #3231256)

Utilizator MihneaCucuMihnea Cucu MihneaCucu Data 25 mai 2024 14:47:31
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

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

int N, M, rmq[17][502][502], putere[502];


int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j)
            fin >> rmq[0][i][j];

    for (int p = 1, dim = 2; dim <= N; ++p, dim *= 2)
    {
        for (int i = 1; i <= N - dim + 1; ++i)
        {
            for (int j = 1; j <= N - dim + 1; ++j)
            {
                int x = i + (dim >> 1), y = j + (dim >> 1);
                rmq[p][i][j] = max(
                        max(rmq[p - 1][i][j], rmq[p - 1][i][y]),
                        max(rmq[p - 1][x][j], rmq[p - 1][x][y])
                );

            }
        }
    }

    putere[1] = 0;
    for (int i = 1; i <= N; ++i)
        putere[i] = 1 + putere[i / 2];

    for (int t = 0; t < M; ++t)
    {
        int rand, col, dim;
        fin >> rand >> col >> dim;
        int nivel = putere[dim];
        int len = (1 << nivel);

        fout << max(max(rmq[nivel][rand][col], rmq[nivel][rand][col + dim - len]), max(rmq[nivel][rand + dim - len][col], rmq[nivel][rand+ dim - len][col + dim - len]));
        fout << "\n";
    }
    return 0;
}