Pagini recente » Cod sursa (job #1336730) | Cod sursa (job #2524044) | Cod sursa (job #915714) | Cod sursa (job #2238289) | Cod sursa (job #384670)
Cod sursa(job #384670)
#include <cstdio>
const int MAX_N = 770;
int n, m;
int d[MAX_N][MAX_N][10];
inline int max(int a, int b) { return (a > b) ? a : b; }
int main()
{
int i, j, pow, x, y, z, k;
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
scanf("%d", &d[i][j][0]);
for (pow = 0;; ++pow)
if (1 << (pow + 1) > n)
break;
for (k = 1; k <= pow; ++k)
{
int v = 1 << (k - 1);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
if (j + (1 << k) - 1 <= n && i + (1 << k) - 1 <= n)
{
int mx = max(d[i][j][k - 1], d[i + v][j][k - 1]);
mx = max(mx, d[i][j + v][k - 1]);
mx = max(mx, d[i + v][j + v][k - 1]);
d[i][j][k] = max(mx, d[i][j][k]);
}
}
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d", &x, &y, &z);
for (pow = 0;; ++pow)
if ((1 << (pow + 1)) >= z)
break;
int v = 1 << pow;
int mx = max(d[x][y][pow], d[x][y + z - v][pow]);
mx = max(mx, d[x + z - v][y][pow]);
mx = max(mx, d[x + z - v][y + z - v][pow]);
printf("%d\n", mx);
}
}