Pagini recente » Cod sursa (job #836781) | Cod sursa (job #2496700) | Cod sursa (job #1940308) | Cod sursa (job #3138222) | Cod sursa (job #2593236)
#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;
}