Cod sursa(job #2593236)

Utilizator mihai2003LLL LLL mihai2003 Data 3 aprilie 2020 12:45:47
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>

std::ifstream in("plantatie.in");
std::ofstream out("plantatie.out");
const int NMAX=501;
const int LMAX=10;

int log2[NMAX];
int rmq[LMAX][NMAX][NMAX];
int mat[NMAX][NMAX];

int main(){
    int n,m;
    in>>n>>m;
    log2[1]=0;
    for(int i=2;i<NMAX;i++)
        log2[i]=log2[i/2]+1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            in>>mat[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            rmq[0][i][j]=mat[i][j];
    for(int k=1;k<=log2[n];k++){
        for(int i=1;i<=n-(1<<(k-1));i++)
            for(int j=1;j<=n-(1<<(k-1));j++){
                rmq[k][i][j]=std::max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j]);
                rmq[k][i][j]=std::max(rmq[k][i][j],std::max(rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
            }
    }
    for(int i=1;i<=m;i++){
        int x,y,k;
        in>>x>>y>>k;
        int l=log2[k];
        int rez=std::max(std::max(rmq[l][x][y],rmq[l-1][x+(1<<(l-1))][y])
                         ,std::max(rmq[l-1][x][y+(1<<(l-1))],rmq[l-1][x+(1<<(l-1))][y+(1<<(l-1))]))<<'\n';
        out<<rez<<'\n';
    }
    return 0;
}