Pagini recente » Cod sursa (job #907937) | Cod sursa (job #243590) | Cod sursa (job #2450851) | Cod sursa (job #1625466) | Cod sursa (job #3225095)
#include<bits/stdc++.h>
std::ifstream fin("plantatie.in");
std::ofstream fout("plantatie.out");
const int MAX = 505;
const int LOG_MAX = 10;
int n, m, x, y, z, rmq[LOG_MAX][MAX][MAX], E[MAX];
struct RMQ{
void init(){
fin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
fin >> rmq[0][i][j];
for(int i = 1; (1 << i) <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k){
rmq[i][j][k] = rmq[i - 1][j][k];
int dl = j + (1 << (i - 1)), dc = k + (1 << (i - 1));
if(dl <= n and rmq[i - 1][dl][k] > rmq[i][j][k])
rmq[i][j][k] = rmq[i - 1][dl][k];
if(dc <= n and rmq[i - 1][j][dc] > rmq[i][j][k])
rmq[i][j][k] = rmq[i - 1][j][dc];
if(dl <= n and dc <= n and rmq[i - 1][dl][dc] > rmq[i][j][k])
rmq[i][j][k] = rmq[i - 1][dl][dc];
}
E[1] = 0;
for(int i = 2; i <= n; ++i)
E[i] = 1 + E[i / 2];
}
void query(){
fin >> x >> y >> z;
int e = E[z];
fout << std::max(std::max(rmq[e][x][y], rmq[e][x][y + z - (1 << e)]), std::max(rmq[e][x + z - (1 << e)][y], rmq[e][x + z - (1 << e)][y + z - (1 << e)])) << '\n';
}
void solve_queries(){
for(;m;--m)
query();
}
} R;
int main(){
R.init();
R.solve_queries();
}