Pagini recente » Cod sursa (job #695067) | Cod sursa (job #2964752) | Cod sursa (job #1643600) | Cod sursa (job #1917866) | Cod sursa (job #3227987)
#include <cstdio>
#include <algorithm>
using namespace std;
inline int ma(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
const int N = 500 + 5;
int n, q;
int lg[N];
int ret[N][N][9];
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
for (int i = 2; i < N; i++)
{
lg[i] = 1 + lg[i / 2];
}
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
scanf("%d", &ret[i][j][0]);
}
}
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++)
{
ret[i][j][k] = ma(ret[i][j][k - 1], ret[i][j + (1 << (k - 1))][k - 1], ret[i + (1 << (k - 1))][j][k - 1], ret[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);
}
}
}
int r1, c1, r2, c2, k;
while (q--)
{
scanf("%d%d%d", &r1, &c1, &k);
r2 = r1 + k - 1;
c2 = c1 + k - 1;
k = lg[k];
printf("%d\n", ma(ret[r1][c1][k], ret[r1][c2 - (1 << k) + 1][k], ret[r2 - (1 << k) + 1][c1][k], ret[r2 - (1 << k) + 1][c2 - (1 << k) + 1][k]));
}
return 0;
}
/**
**/