Cod sursa(job #3295668)

Utilizator 9onelostSendrescu Tudor-Gabriel 9onelost Data 7 mai 2025 17:51:40
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>
#define DIM 501
using namespace std;

ifstream fin("plantatie.in");

ofstream fout("plantatie.out");

const int LOG = 10;

int n,q,lin,col,lat;

int E[DIM];

int a[DIM][DIM];

int rmq[LOG][DIM][DIM];

void build_log(){

    E[1] = 0;

    for(int i=2;i<=n;i++)

        E[i] = 1 + E[i/2];

}

void build_sparse(){

    for(int i=1;i<=n;i++){

        for(int j=1;j<=n;j++){

            rmq[0][i][j] = a[i][j];

        }

    }

    for(int k=1;(1<<k)<=n;k++){

        int len = 1 << (k-1);

        for(int i=1;i+(1<<k)-1<=n;i++){

            for(int j=1;j+(1<<k)-1<=n;j++){

                rmq[k][i][j] = max({

                    rmq[k-1][i][j],

                    rmq[k-1][i+len][j],

                    rmq[k-1][i][j+len],

                    rmq[k-1][i+len][j+len]

                });

            }

        }

    }

}

int Query(int i, int j, int k){

    int p = E[k];

    int len = 1 << p;

    return max({

        rmq[p][i][j],

        rmq[p][i+k-len][j],

        rmq[p][i+k-len][j+k-len],

        rmq[p][i][j+k-len]

    });

}

int main(){

    fin >> n >> q;

    for(int i=1;i<=n;i++)

        for(int j=1;j<=n;j++)

            fin >> a[i][j];

    build_sparse();

    build_log();

    while(q--){

        fin >> lin >> col >> lat;

        fout << Query(lin,col,lat) << '\n';

    }

    return 0;
}