Cod sursa(job #3133966)

Utilizator RobertJmekRobert RobertJmek Data 27 mai 2023 19:15:31
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream inputFile("plantatie.in");
ofstream outputFile("plantatie.out");
int plantation[12][512][512], numTrees, queryCount, gridSizeX, gridSizeY;

inline int maximum(int x, int y) {
    return x > y ? x : y;
}

int main() {
    inputFile >> gridSizeX >> gridSizeY;

    for (int i = 0; i < gridSizeX; ++i) {
        for (int j = 0; j < gridSizeY; ++j) {
            inputFile >> plantation[0][i][j];
        }
    }

    for (int k = 1; (1 << k) <= gridSizeX; ++k) {
        for (int i = 0; i <= gridSizeX; ++i) {
            for (int j = 0; j <= gridSizeY; ++j) {
                plantation[k][i][j] = maximum(maximum(plantation[k - 1][i][j], plantation[k - 1][i + (1 << (k - 1))][j]),
                                              maximum(plantation[k - 1][i][j + (1 << (k - 1))], plantation[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]));
            }
        }
    }

    inputFile >> queryCount;

    for (int i = 1; i <= queryCount; ++i) {
        int x, y, k;
        inputFile >> x >> y >> k;
        int q = 1;
        x--; y--;
        int nr = 0;

        while (q <= k) {
            nr++;
            q *= 2;
        }

        q /= 2;
        nr--;
        outputFile << maximum(maximum(plantation[nr][x][y], plantation[nr][x + k - q][y]),
                              maximum(plantation[nr][x][y + k - q], plantation[nr][x + k - q][y + k - q])) << '\n';
    }

    return 0;
}