Pagini recente » Cod sursa (job #3183925) | Cod sursa (job #2970186) | Cod sursa (job #287201) | Cod sursa (job #585174) | Cod sursa (job #1956149)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,qs;
int RMQ[19][505][505];
int LOG2[505*500];
void read(){
in>>n>>qs;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
in>>RMQ[0][i][j];
}
}
}
void logs(){
for(int i=2;i<=n;i++){
LOG2[i]=LOG2[i/2]+1;
}
}
inline int max(int x, int y, int z, int a){
return (max(x,y),max(z,a));
}
void prep(){
logs();
for(int i=1;(1<<i)<=n;i++){
for(int x=1;x<=n;x++){
for(int y=1;y<=n;y++){
RMQ[i][x][y]=max(RMQ[i-1][x][y],RMQ[i-1][x][y+(1<<(i-1))],RMQ[i-1][x+(1<<(i-1))][y],RMQ[i-1][x+(1<<(i-1))][y+(1<<(i-1))]);
}
}
}
}
int query(int x, int y, int dim){
int log_elem;
log_elem=LOG2[dim];
return max(RMQ[log_elem][x][y],RMQ[log_elem][x+dim-(1<<log_elem)][y],RMQ[log_elem][x][y+dim-(1<<log_elem)],RMQ[log_elem][x+dim-(1<<log_elem)][y+dim-(1<<log_elem)]);
}
void queries(){
int x,y,k;
for(int i=1;i<=qs;i++){
in>>x>>y>>k;
out<<query(x,y,k)<<"\n";
}
}
int main(){
read();
prep();
queries();
return 0;
}