Pagini recente » Cod sursa (job #1460536) | Cod sursa (job #971760) | Cod sursa (job #917320) | Cod sursa (job #2899604) | Cod sursa (job #1389073)
#include<stdio.h>
const int LOG = 10, NMAX = 501;
int d[LOG][NMAX][NMAX], grid[NMAX][NMAX];
int max (int p, int q, int r, int s) {
int res = p;
if(q > res) res = q;
if(r > res) res = r;
if(s > res) res = s;
return res;
}
int main() {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n, i, j, k, m, x, y, p2, lat, latQuery, half, xRight, yRight;
scanf("%d%d", &n, &m);
for(i = 1; i <= n; ++ i)
for(j = 1; j <= n; ++ j)
scanf("%d", &grid[i][j]);
for(i = 1; i <= n; ++ i)
for(j = 1; j <= n; ++ j)
d[0][i][j] = grid[i][j];
for(p2 = 1; (1 << p2) <= n; ++ p2) {
lat = 1 << p2;
for(i = 1; i <= n - lat + 1; ++ i)
for(j = 1; j <= n - lat + 1; ++ j) {
half = lat / 2;
d[p2][i][j] = max(d[p2 - 1][i][j], d[p2 - 1][i + half][j + half], d[p2 - 1][i + half][j], d[p2 - 1][i][j + half]);
}
}
for(i = 1; i <= m; ++ i) {
scanf("%d%d%d", &x, &y, &latQuery);
xRight = x + latQuery - 1;
yRight = y + latQuery - 1;
p2 = 0;
while((1 << p2) <= latQuery)
++ p2;
-- p2;
lat = 1 << p2;
printf("%d\n", max(d[p2][x][y], d[p2][x][yRight - lat + 1], d[p2][xRight - lat + 1][y], d[p2][xRight - lat + 1][yRight - lat + 1]));
}
return 0;
}