Cod sursa(job #3232340)

Utilizator danielbirsannBirsan Daniel danielbirsann Data 29 mai 2024 23:47:34
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>
#include <cmath>
using namespace std;

const int MAXN = 505, MAXLOG = 10;

ifstream f("plantatie.in");
ofstream g("plantatie.out");

int sparseTable[MAXLOG][MAXN][MAXN],n, m;

int query(int row, int col, int length) {
    int logLength =(int) log2(length);
    return max(
            max(sparseTable[logLength][row][col], sparseTable[logLength][row + length - (1 << logLength)][col]),
            max(sparseTable[logLength][row][col + length - (1 << logLength)], sparseTable[logLength][row + length - (1 << logLength)][col + length - (1 << logLength)])
    );
}

int main() {
    f >> n >> m;

    for (int row = 1; row <= n; ++row) {
        for (int col = 1; col <= n; ++col) {
            f >> sparseTable[0][row][col];
        }
    }

    for (int k = 1; (1 << k) <= n; ++k) {
        for (int row = n - (1 << k) + 1; row >= 1; --row) {
            for (int col = n - (1 << k) + 1; col >= 1; --col) {
                sparseTable[k][row][col] = max(
                        max(sparseTable[k-1][row][col], sparseTable[k-1][row][col + (1 << (k-1))]),
                        max(sparseTable[k-1][row + (1 << (k-1))][col], sparseTable[k-1][row + (1 << (k-1))][col + (1 << (k-1))])
                );
            }
        }
    }

    while (m--) {
        int i, j, k;
        f >> i >> j >> k;
        g << query(i, j, k) << "\n";
    }

    return 0;
}