Cod sursa(job #3280182)

Utilizator Mihai_999Diaconeasa Mihai Mihai_999 Data 25 februarie 2025 18:40:03
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#define nl '\n'

using namespace std;

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

const int NMAX = 502, LGMAX = 9;

int n, m, rmq[LGMAX][NMAX][NMAX], lg[NMAX];

int query(int i, int j, int len)
{
    int p = lg[len];
    return max(max(rmq[p][i][j],
                   rmq[p][i][j+len-1-(1<<p)+1]),
               max(rmq[p][i+len-1-(1<<p)+1][j],
                   rmq[p][i+len-1-(1<<p)+1][j+len-1-(1<<p)+1]));
}

int main()
{
    fin >> n >> m;
    lg[0] = -1;
    for (int i = 1; i <= n; i++)
    {
        lg[i] = lg[i/2]+1;
        for (int j = 1; j <= n; j++)
            fin >> rmq[0][i][j];
    }
    for (int p = 1; p <= lg[n]; p++)
        for (int i = 1; i + (1<<p) - 1 <= n; i++)
            for (int j = 1; j + (1 << p) - 1 <= n; j++)
                rmq[p][i][j] = max(max(rmq[p-1][i][j],
                                       rmq[p-1][i][j+(1<<(p-1))]),
                                   max(rmq[p-1][i+(1<<(p-1))][j],
                                       rmq[p-1][i+(1<<(p-1))][j+(1<<(p-1))]));
    while (m--)
    {
        int x, y, len;
        fin >> x >> y >> len;
        fout << query(x, y, len) << nl;
    }
    return 0;
}