Cod sursa(job #3301733)

Utilizator ShAwDoRneYNacu Gabriel ShAwDoRneY Data 29 iunie 2025 13:40:30
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <vector>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    freopen("plantatie.in", "r", stdin);
    freopen("plantatie.out", "w", stdout);

    int n,q;
    cin >> n >> q;
    int log = 9;
    vector<vector<int>> arr(n+1, vector<int>(n+1));
    vector<vector<vector<int>>> RMQ(n+1, vector<vector<int>>(n+1, vector<int>(log)));

    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++) {
            cin >> arr[i][j];
            RMQ[i][j][0] = arr[i][j];
        }
    }

    for (int pow=1; pow <= log; pow++) {
        for (int i=1; i + (1 << pow) - 1 <=n; i++) {
            for (int j=1; j + (1 << pow) - 1 <=n; j++) {
                RMQ[i][j][pow] = max(RMQ[i][j][pow-1], RMQ[i+(1<<(pow-1))][j][pow-1]);
                RMQ[i][j][pow] = max(RMQ[i][j][pow], RMQ[i][j+(1<<(pow-1))][pow-1]);
                RMQ[i][j][pow] = max(RMQ[i][j][pow], RMQ[i+(1<<(pow-1))][j+(1<<(pow-1))][pow-1]);
            }
        }
    }

    while (q--) {
        int i,j,l;
        cin >> i >> j >> l;
        int pow = 31 - __builtin_clz(l);
        int ans = max(RMQ[i][j][pow], RMQ[i + l - (1 << pow)][j][pow]);
        ans = max(ans, RMQ[i][j + l - (1 << pow)][pow]);
        ans = max(ans, RMQ[i + l - (1 << pow)][j + l - (1 << pow)][pow]);

        cout << ans << "\n";
    }


    return 0;
}