Cod sursa(job #3232123)

Utilizator maciucateodorMaciuca Teodor maciucateodor Data 29 mai 2024 00:03:20
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

const int MAXN = 510;
const int LOG = 10;

int n, m;
int productivity[MAXN][MAXN][LOG];
int result, x, y, sizer;

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

    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            fin >> productivity[i][j][0];
        }
    }

    for (int k = 1, p = 1; 2 * p <= n; ++k, p <<= 1) {
        for (int i = 1; i <= n - 2 * p + 1; ++i) {
            for (int j = 1; j <= n - 2 * p + 1; ++j) {
                productivity[i][j][k] = max({productivity[i][j][k-1],productivity[i + p][j][k-1],
                                             productivity[i][j + p][k-1],productivity[i + p][j + p][k-1]});
            }
        }
    }

    for (int q = 0; q < m; ++q) {
        fin >> x >> y >> sizer;
        int logsizer = 0, p = 1;
        while (2 * p <= sizer) {
            p <<= 1;
            ++logsizer;
        }

        result = max({productivity[x][y][logsizer],productivity[x + sizer - p][y][logsizer],
                      productivity[x][y + sizer - p][logsizer],productivity[x + sizer - p][y + sizer - p][logsizer]});

        fout << result << '\n';
    }

    return 0;
}