Cod sursa(job #3305246)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 31 iulie 2025 01:29:27
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int rmq[10][505][505];
int e[505];
int n, m;
int main(){
    f >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            f >> rmq[0][i][j];
        }
    }
    for(int p = 1; (1 << p) <= n; p++){
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                int i2 = i, j2 = j;
                if(i + (1 << (p - 1)) <= n){
                    i2 = i + (1 << (p - 1));
                }
                if(j + (1 << (p - 1)) <= n){
                    j2 = j + (1 << (p - 1));
                }
                rmq[p][i][j] = max(rmq[p - 1][i][j], max(rmq[p - 1][i2][j], max(rmq[p - 1][i][j2], rmq[p - 1][i2][j2])));
            }
        }
    }
    e[1] = 0;
    for(int i = 2; i <= n; i++){
        e[i] = 1 + e[i / 2];
    }
    for(int t = 1; t <= m; t++){
        int i, j, val;
        f >> i >> j >> val;
        int exp = e[val], lungime = (1 << e[val]);
        int i2 = i + val - lungime;
        int j2 = j + val - lungime;
        g << max(rmq[exp][i][j], max(rmq[exp][i2][j], max(rmq[exp][i][j2], rmq[exp][i2][j2]))) << '\n';
    }
}