Cod sursa(job #3304460)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 23 iulie 2025 21:49:26
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 5e2;
int a[NMAX + 1][NMAX + 1], RMQ[NMAX + 1][NMAX + 1][10];

int query(int x1, int y1, int k) {
    int x2 = x1 + k - 1;
    int y2 = y1 + k - 1;
    int L = int(log2(k));
    if(k == (1 << L)) {
        L--;
    }
    return max(max(RMQ[x1][y1][L], RMQ[x2 - (1 << L) + 1][y1][L]),
    max(RMQ[x1][y2 - (1 << L) + 1][L], RMQ[x2 - (1 << L) + 1][y2 - (1 << L) + 1][L]));

}

int main() {
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");
    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cin >> a[i][j];
            //cout << a[i][j] << ' ';
            RMQ[i][j][0] = a[i][j];
        }
        //cout << '\n';
    }
    for(int k = 1; k <= ceil(log2(n)); k++) {
        for(int i = 1; i <= n - (1 << k) + 1; i++) {
            for(int j = 1; j <= n - (1 << k) + 1; j++) {
                RMQ[i][j][k] = max(max(RMQ[i][j][k - 1], RMQ[i + (1 << (k - 1))][j][k - 1]), 
                max(RMQ[i][j + (1 << (k - 1))][k - 1], RMQ[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
            }
        }
    }
    while(m--) {
        int x, y, k;
        cin >> x >> y >> k;
        //cout << x << ' ' << y << ' ' << k << '\n';
        cout << query(x, y, k) << '\n';
    }
    return 0;
}