Cod sursa(job #3224834)

Utilizator Raul_AArdelean Raul Raul_A Data 16 aprilie 2024 12:27:31
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define eb emplace_back
#define ll long long
#define oo LLONG_MAX >> 1
#define pii pair<int, int>
using namespace std;

const string fn("plantatie");

ifstream in(fn + ".in");
ofstream out(fn + ".out");

#define cin in
#define cout out

int rmq[15][505][505], Log[505];
int n, q;

int main()
{
    cin >> n >> q;
    for (int i = 1; i <= n; i++)
        for (int j = 1, x; j <= n; j++)
            cin >> rmq[0][i][j];

    for (int p = 1, len = 2; len <= n; len *= 2, p++)
        for (int i = 1; i <= n - len + 1; i++)
            for (int j = 1; j <= n - len + 1; j++)
            {
                int ii = i + (len / 2);
                int jj = j + (len / 2);

                rmq[p][i][j] = max({rmq[p - 1][i][j], rmq[p - 1][ii][jj], rmq[p - 1][i][jj], rmq[p - 1][ii][j]});
            }
    Log[1] = 0;
    for (int i = 2; i <= n; i++)
        Log[i] = Log[i / 2] + 1;
    while (q--)
    {
        int i, j, l;
        cin >> i >> j >> l;
        int k = Log[l];
        int len = (1 << k);

        int ii = i + l - len;
        int jj = j + l - len;
        //cout << i << ' ' << j << ' ' << l << '\n';
        //cout << k << ' ' << i << ' ' << j << ' ' << ii << ' ' << jj << '\n';
        cout << max({rmq[k][i][j], rmq[k][i][jj], rmq[k][ii][j], rmq[k][ii][jj]}) << '\n';
    }
    return 0;
}