Cod sursa(job #2851111)

Utilizator AswVwsACamburu Luca AswVwsA Data 18 februarie 2022 09:24:47
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
using namespace std;
const int NMAX = 504, LMAX = 9;
int r[LMAX][NMAX][NMAX], prec[NMAX];
int main()
{
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");
    int n, q, i, j, k;
    cin >> n >> q;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            cin >> r[0][i][j];
    for (i = 2; i <= n; i++)
        prec[i] = 1 + prec[(i >> 1)];
    for (k = 1; k <= prec[n]; k++)
    {
        int lat = (1 << (k - 1));
        for (i = lat; i <= n; i++)
            for (j = lat; j <= n; j++)
                r[k][i][j] = max(max(r[k - 1][i][j], r[k - 1][i][j - lat]),
                                 max(r[k - 1][i - lat][j - lat], r[k - 1][i - lat][j]));
    }
    while (q--)
    {
        int a, b, l;
        cin >> a >> b >> l;
        a += l - 1;
        b += l - 1;
        int l2 = (1 << prec[l]);
        cout << max(max(r[prec[l]][a - l + l2][b - l + l2], r[prec[l]][a][b - l + l2]),
                    max(r[prec[l]][a][b], r[prec[l]][a - l + l2][b])
                   ) << "\n";
    }
    return 0;
}