Cod sursa(job #3330573)

Utilizator vlad_binVlad Bintintan vlad_bin Data 20 decembrie 2025 11:01:00
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
    // ios::sync_with_stdio(false);
    // cin.tie(nullptr);
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");

    int n, m;
    cin >> n >> m;
    vector<vector<int>> input(n, vector<int>(n));
    for (auto &vec : input)
        for (auto &x : vec)
            cin >> x;
    
    int max_lg = __lg(n);
    vector<vector<vector<int>>> rmq(max_lg + 1);
    rmq[0] = move(input);
    for (int k = 0; k < max_lg; k++)
    {
        int len = 1 << k;
        rmq[k + 1] = vector<vector<int>>(n - (len<<1) + 1, vector<int>(n - (len << 1) + 1));
        for (int i = 0; i + len < rmq[k].size(); i++)
            for (int j = 0; j + len < rmq[k].size(); j++)
                rmq[k+1][i][j] = max({rmq[k][i][j], rmq[k][i + len][j], rmq[k][i][j + len], rmq[k][i + len][j + len]});
    }

    while (m--)
    {
        int a, b, len;
        cin >> a >> b >> len;
        a--;b--;
        int len_lg = __lg(len);
        cout << max({rmq[len_lg][a][b], rmq[len_lg][a + len - (1<<len_lg)][b], rmq[len_lg][a][b + len - (1<<len_lg)], rmq[len_lg][a + len - (1<<len_lg)][b + len - (1<<len_lg)]}) << '\n';
    }
}