Cod sursa(job #3230138)

Utilizator vladvoicux64Voicu Ioan Vladut vladvoicux64 Data 19 mai 2024 12:57:46
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <bit>
int main()
{
    std::ifstream input("plantatie.in");
    std::ofstream output("plantatie.out");
    unsigned int N, M;
    input >> N >> M;
    unsigned int logN = std::bit_width(N);
    int prod[N][N], rmq[N][N][logN];
    for (size_t i = 0; i < N; ++i) {
        for (size_t j = 0; j < N; ++j) {
            input >> prod[i][j];
        }
    }
    for (size_t power = 0; power < logN; ++power) {
        for (size_t i = 0; i < N; ++i) {
            for (size_t j = 0; j < N; ++j) {
                if (!power) rmq[i][j][power] = prod[i][j];
                else
                {
                    if(i + (1 << (power - 1)) < N && j + (1 << (power - 1)) < N)
                    {
                        rmq[i][j][power] = std::max(std::max(std::max(rmq[i][j][power - 1], rmq[i + (1 << (power - 1))][j][power - 1]), rmq[i][j + (1 << (power - 1))][power - 1]), rmq[i + (1 << (power - 1))][j + (1 << (power - 1))][power - 1]);
                    }
                }
            }
        }
    }
    for (size_t i = 0; i < M; ++i) {
        unsigned int x, y, side;
        input >> x >> y >> side;
        x--; y--;
        unsigned int logside = std::bit_width(side) - 1;
        output << std::max(std::max(std::max(rmq[x][y][logside], rmq[x + side - (1 << logside)][y][logside]), rmq[x][y + side - (1 << logside)][logside]), rmq[x + side - (1 << logside)][y + side - (1 << logside)][logside]) << std::endl;
    }
    return 0;
}