Pagini recente » Cod sursa (job #2543958) | Cod sursa (job #64341) | Cod sursa (job #1005771) | Cod sursa (job #799259) | Cod sursa (job #19463)
Cod sursa(job #19463)
#include <cstdio>
#define FIN "plantatie.in"
#define FOUT "plantatie.out"
#define MAXN 505
#define max(x,y) ((x>y) ? (x) : (y))
long mat[MAXN][MAXN][9], n, m, i, j, x, y, z, v;
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%ld %ld", &n, &m);
for (i=1; i<=n; i++) for (j=1; j<=n; j++) scanf("%ld", &mat[i][j][0]);
for (x=1; x<=8; x++)
for (i=n; i>0; i--)
for (j=n; j>0; j--) {
mat[i][j][x] = mat[i][j][x-1];
if (i+(1<<x) <=n) mat[i][j][x] = max(mat[i][j][x], mat[i+(1<<x)][j][x-1]);
if (i+(1<<x) <=n && (j+(1<<x) <=n)) mat[i][j][x] = max(mat[i][j][x], mat[i+(1<<x)][j+(1<<x)][x-1]);
if (j+(1<<x) <=n) mat[i][j][x] = max(mat[i][j][x], mat[i][j+(1<<x)][x-1]);
}
for (i=1; i<=m; i++) {
scanf("%ld %ld %ld", &x, &y, &z);
j = (1<<8);
while (j>z) j = j>>1;
v = mat[x][y][j];
v = max(v, mat[x+z-(1<<j)][y][j]);
v = max(v, mat[x][y+z-(1<<j)][j]);
printf("%ld\n", v);
}
return 0;
}