Cod sursa(job #3269493)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 19 ianuarie 2025 13:11:52
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, q, rmq[10][503][503], expo[503];

int main()
{
    fin >> n >> q;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++) fin >> rmq[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 + (1 << (p - 1));
                int j2 = j1 + (1 << (p - 1));
                rmq[p][i1][j1] = max({rmq[p - 1][i1][j1], rmq[p - 1][i1][j2], rmq[p - 1][i2][j1], rmq[p - 1][i2][j2]});
            }
        }
    }
    expo[1] = 0;
    for(int i=2; i<=n; i++) expo[i] = expo[i / 2] + 1;
    while(q--) {
        int i1, j1, lat; fin >> i1 >> j1 >> lat;
        int putere = expo[lat];
        int lung = (1 << putere);
        int i2 = i1 + lat - lung, j2 = j1 + lat - lung;
        fout << max({rmq[putere][i1][j1], rmq[putere][i1][j2], rmq[putere][i2][j1], rmq[putere][i2][j2]}) << '\n';
    }

    return 0;
}