Cod sursa(job #3229803)

Utilizator VladLuncanLuncan Vlad VladLuncan Data 17 mai 2024 16:24:40
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

#define inf 0x3f3f3f3f

using namespace std;

int n, m;
int r[17][505][505];
int E[100001];

int maxim(int a, int b, int c, int d)
{
    return max(max(a, b), max(c, d));
}

void preCompute()
{
    E[1] = 0;
    for (int i = 2; i <= n; ++i)
        E[i] = E[i / 2] + 1;

    for (int p = 1, lat = 2; lat <= n; p++, lat *= 2)
    {
        for (int i1 = 1; i1 <= n - lat + 1; i1++)
        {
            for (int j1 = 1; j1 <= n - lat + 1; j1++)
            {
                int i2 = i1 + (lat >> 1);
                int j2 = j1 + (lat >> 1);
                r[p][i1][j1] = maxim(r[p-1][i1][j1], r[p-1][i2][j1], r[p-1][i1][j2], r[p-1][i2][j2]);
            }
        }
    }
}

void read()
{
    cin >> n >> m;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            cin >> r[0][i][j];

    preCompute();

    for (int i = 1; i <= m; ++i)
    {
        int I, J, L;
        cin >> I >> J >> L;

        int e = E[L];
        int len = (1 << e);

        cout << maxim(r[e][I][J], r[e][I + L - len][J], r[e][I][J + L - len], r[e][I + L - len][J + L - len]) << '\n';
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

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

    read();


    return 0;
}