Cod sursa(job #2593243)

Utilizator mihai2003LLL LLL mihai2003 Data 3 aprilie 2020 12:58:11
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 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))+1;i++)
            for(int j=1;j<=n-(1<<(k-1))+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];
        std::cout<<l<<'\n';
        int rez=std::max(std::max(rmq[l][x][y],rmq[l][x+k-(1<<l)][y])
                         ,std::max(rmq[l][x][y+k-(1<<l)],rmq[l][x+k-(1<<l)][y+k-(1<<l)]));
        out<<rez<<'\n';
    }
    return 0;
}