Pagini recente » Cod sursa (job #176950) | Cod sursa (job #1535248) | Cod sursa (job #2958737) | Cod sursa (job #1615461) | Cod sursa (job #2395945)
#include <algorithm>
#include <stdio.h>
const int MAX_N = 500;
int rmq[1 + MAX_N][1 + MAX_N][10];
int lg[1 + MAX_N];
int main() {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n, Q;
scanf("%d%d", &n, &Q);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
scanf("%d", &rmq[i][j][0]);
lg[1] = 0;
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (int k = 1; (1 << k) < n; k++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j + (1 << k) - 1 <= n; j++) {
int size = 1 << (k - 1);
rmq[i][j][k] = std::max(std::max(rmq[i][j][k - 1], rmq[i + size][j][k - 1]),
std::max(rmq[i][j + size][k - 1], rmq[i + size][j + size][k - 1]));
}
for (int q = 0; q < Q; q++) {
int x, y, k;
scanf("%d%d%d", &x, &y, &k);
int pow = lg[k - 1];
int size = (1 << pow);
printf("%d\n", std::max(std::max(rmq[x][y][pow], rmq[x][y - size + k][pow]),
std::max(rmq[x - size + k][y][pow], rmq[x - size + k][y - size + k][pow])));
}
return 0;
}