Cod sursa(job #3351255)

Utilizator CarenaMironov Cezar Luca Carena Data 18 aprilie 2026 10:37:52
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

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

const int NMAX=5e2+5;
int n, m;

struct RMQ
{
    int rmq[8][NMAX][NMAX];
    
    void build()
    {
        for(int b=1;b<8;b++)
            for(int i=1;i+(1<<b)-1<=n;i++)
                for(int j=1;j+(1<<b)-1<=n;j++)
                    rmq[b][i][j]=max(max(rmq[b-1][i][j], rmq[b-1][i+(1<<(b-1))][j]), max(rmq[b-1][i][j+(1<<(b-1))], rmq[b-1][i+(1<<(b-1))][j+(1<<(b-1))]));
    }
    
    int query(int i, int j, int k)
    {
        int lg=31-__builtin_clz(k);
        return max(max(rmq[lg][i][j], rmq[lg][i+k-(1<<lg)][j]), max(rmq[lg][i][j+k-(1<<lg)], rmq[lg][i+k-(1<<lg)][j+k-(1<<lg)]));
    }
}ds;

int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            in>>ds.rmq[0][i][j];
    ds.build();
    while(m--)
    {
        int i, j, k; in>>i>>j>>k;
        out<<ds.query(i, j, k)<<'\n';
    }
    return 0;
}