Pagini recente » Cod sursa (job #996029) | Cod sursa (job #1370235) | Cod sursa (job #2542687) | Cod sursa (job #1032007) | Cod sursa (job #2674272)
#include <iostream>
#include <cstdio>
using namespace std;
const int NMAX = 500;
const int LOG2 = 8;
int n, m;
int log2[NMAX + 1];
int rmq[LOG2 + 1][NMAX + 1][NMAX + 1];
void gen_log2() {
for(int i = 2; i <= n; ++i)
log2[i] = log2[i >> 1] + 1;
}
void gen_rmq() {
for(int l2 = 1; l2 <= log2[n]; l2++) {
int l = 1 << l2;
for(int i = 1; i + l - 1 <= n; i++)
for(int j = 1; j + l - 1 <= n; j++)
rmq[l2][i][j] = max(max(rmq[l2 - 1][i][j], rmq[l2 - 1][i][j + l / 2]),
max(rmq[l2 - 1][i + l / 2][j], rmq[l2 - 1][i + l / 2][j + l / 2]));
}
}
int query(int i, int j, int k) {
int l2 = log2[k], l = 1 << l2;
return max(max(rmq[l2][i][j], rmq[l2][i][j + k - l]),
max(rmq[l2][i + k - l][j], rmq[l2][i + k - l][j + k - l]));
}
int main() {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d %d", &n, &m);
gen_log2();
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
scanf("%d", &rmq[0][i][j]);
gen_rmq();
int x, y, z;
for(int i = 1; i <= m; i++) {
scanf("%d %d %d", &x, &y, &z);
printf("%d\n", query(x, y, z));
}
return 0;
}