Cod sursa(job #2858290)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 27 februarie 2022 12:45:22
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m, x, y, l, k, len;
int a[100][505][505], lg[505];
int main() {
    fin >> n >> m;
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++){
            fin >> a[0][i][j];
        }
    }

    for (int p=1, lat=2;lat<=n;p++, lat*=2){
        for (int i=1;i<=n-lat+1;i++){
            for (int j=1;j<=n-lat+1;j++){
                int i2 = i + (lat >> 1);
                int j2 = j + (lat >> 1);
                a[p][i][j] = max(max(a[p-1][i][j], a[p-1][i2][j]), max(a[p-1][i][j2], a[p-1][i2][j2]));
            }
        }
    }
    lg[1] = 0;
    for (int i=2;i<=n;i++){
        lg[i] = 1 + lg[i/2];
    }
    for (int i=1;i<=m;i++){
        fin >> x >> y >> l;
        k = lg[l];
        len = (1 << k);
        int x2 = x + l - len;
        int y2 = y + l - len;
        fout << max(max(a[k][x][y], a[k][x][y2]), max(a[k][x2][y], a[k][x2][y2])) << '\n';
    }
    return 0;
}