Cod sursa(job #3297780)

Utilizator Mathew108Porumboiu Matei Mathew108 Data 23 mai 2025 19:30:52
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

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

int lookup[505][505][26];
int n,m;
int M[505][505];

void Precalculare() {
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
           lookup[i][j][0] = M[i][j];

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


}



int main() {
    int lin, col, lat;
    fin >> n >> m;

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

    Precalculare();
    for(int i = 0; i < m; i++) {
        fin >> lin >> col >> lat;
        int k = int(log2(lat));
        int p = 1 << k;
        int prod_max = max(max(lookup[lin][col][k], lookup[lin][col + lat - p][k]), max(lookup[lin + lat - p][col][k], lookup[lin + lat - p][col + lat - p][k]));
        fout << prod_max << "\n";
    }



    return 0;

}