Pagini recente » Cod sursa (job #541065) | Cod sursa (job #2776629) | Cod sursa (job #476260) | Cod sursa (job #1253198) | Cod sursa (job #2858319)
#include <bits/stdc++.h>
using namespace std;
const int LMAX = 10;
const int MAXN = 501;
int rmq[MAXN][MAXN][LMAX], lg[MAXN];
int main() {
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int N, M;
cin >> N >> M;
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
cin >> rmq[i][j][0];
for(int i = 2; i <= N; i++)
lg[i] = lg[i / 2] + 1;
for(int k = 1; (1 << k) <= N; k++) {
int l = (1 << k);
for(int i = 1; i + l - 1 <= N; i ++)
for(int j = 1; j + l - 1 <= N; j ++)
rmq[i][j][k] = max(max(rmq[i][j][k - 1], rmq[i][j + (l >> 1)][k - 1]), max(rmq[i + (l >> 1)][j][k - 1], rmq[i + (l >> 1)][j + (l >> 1)][k - 1]));
}
while(M--) {
int x, y, k;
cin >> x >> y >> k;
int p = lg(1 << lg[k]);
cout << max(rmq[x][y][lg[k]], max(rmq[x + k - p][y][lg[k]], max(rmq[x][y + k - p][lg[k]], rmq[x + k - p][y + k - p][lg[k]]))) << '\n';
}
return 0;
}