Cod sursa(job #3232246)

Utilizator pascarualexPascaru Alexandru pascarualex Data 29 mai 2024 12:44:45
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

int r[10][502][502];
int E[502];

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

    int n, m;

    fin >> n >> m;

    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++){
            fin >> r[0][i][j];
        }
    }
    for (int p = 1, lat = 2; lat<=n; p++, lat *= 2){
        for (int i1 = 1; i1 <= n-lat+1 ; i1++){
            for (int j1 = 1; j1 <= n-lat + 1; j1++){

                int i2 = i1 + (lat>>1);
                int j2 = j1 + (lat>>1);

                r[p][i1][j1] = std::max(std::max(r[p-1][i1][j1], r[p-1][i2][j1]), std::max(r[p-1][i1][j2], r[p-1][i2][j2]));
            }
        }
    }

    E[1] = 0;

    for (int i=2;i<=n;i++) {
        E[i] = 1 + E[i / 2];
    }

    for (;m;m--){
        int i1, j1, L;
        fin >> i1 >> j1 >> L;

        int k = E[L];
        int len = (1<<k);

        int i2 = i1 + L - len;
        int j2 = j1 + L - len;

        fout << std::max(std::max(r[k][i1][j1], r[k][i1][j2]), std::max(r[k][i2][j1], r[k][i2][j2]))<<"\n";
    }

    return 0;
}