Cod sursa(job #3242831)

Utilizator rockoanaOana Pasca rockoana Data 14 septembrie 2024 11:24:12
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

int rq[9][502][502];

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 >> rq[0][i][j];
        }
    }

    for(int k = 1; (1 << k) <= n; k++){
        for(int i = 1; i <= n - (1 << k)+ 1; i++){
            for(int j = 1; j <= n - (1 << k) + 1; j++){
                rq[k][i][j] = max({rq[k - 1][i][j], rq[k - 1][i + (1 << (k-1))][j], rq[k - 1][i][j + (1 << (k-1))], rq[k - 1][i + (1 << (k -1))][j + (1 << (k - 1))]});
            }
        }
    }

    int j, i, k;
    for(int x = 0; x < m; x++){
        cin >> i >> j >> k;
        int p = 31 - __builtin_clz(k);
        int res = max({rq[p][i][j], rq[p][i + k - (1 << p)][j], rq[p][i][j + k - (1 << p)], rq[p][i + k - (1 << p)][j + k - (1 << p)]});
        cout << res << '\n';
    }

    return 0;
}