Pagini recente » Cod sursa (job #1844411) | Cod sursa (job #2550926) | Cod sursa (job #809771) | Cod sursa (job #178908) | Cod sursa (job #1956159)
#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];
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 maxi(int x, int y, int z, int a){
return max(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]=maxi(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=LOG2[dim];
int s=dim-(1<<log_elem);
return maxi(RMQ[log_elem][x][y],RMQ[log_elem][x+s][y],RMQ[log_elem][x][y+s],RMQ[log_elem][x+s][y+s]);
}
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;
}