Cod sursa(job #3327381)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 3 decembrie 2025 17:28:43
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>

using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

const int Nmax = 505;
int rmq[Nmax][Nmax][10], log[Nmax];
int main()
{
    int n, m, i, j, k;
    fin >> n >> m;
    for ( i = 1; i <= n; ++i )
        for ( j = 1; j <= n; ++j )
            fin >> rmq[i][j][0];

    for ( i = 2; i <= n; ++i )
        log[i] = log[i / 2] + 1;

    for ( i = 1; i <= n; ++i )
        for ( j = 1; j <= n; ++j )
            for ( k = 1; k <= log[i] && k <= log[j]; ++k )
            {
                rmq[i][j][k] = max(   rmq[i][j][k - 1], max(    rmq[i - (1 << ( k - 1)) ][j][k - 1],   max(    rmq[i][j - (1 << ( k - 1)) ][k - 1]    ,      rmq[i - (1 << ( k - 1))][j - (1 << ( k - 1))][k - 1]   ) ) );
            }

    for ( i = 1; i <= m; ++i )
    {
        int x, y, k;
        fin >> x >> y >> k;
        ///Convertim (x, y) in coord coltului dr jos, pt ca asa ne am definit rmq-ul
        x = x + k - 1;
        y = y + k - 1;


        int l = log[k];
        int sol = max( rmq[x][y][l], max(rmq[x - k + (1 << l)][y][l], max( rmq[x - k + (1 << l)][y - k + (1 << l)][l],   rmq[x][y - k + (1 << l)][l] )));

        fout << sol << '\n';
    }
    return 0;
}