Pagini recente » Cod sursa (job #1475009) | Cod sursa (job #1360929) | Cod sursa (job #86848) | Cod sursa (job #1544251) | Cod sursa (job #384675)
Cod sursa(job #384675)
#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; }
inline int max(int a, int b, int c, int d)
{
int mx = (a > b) ? a : b;
mx = (mx > c) ? mx : c;
mx = (mx > d) ? mx : d;
return mx;
}
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; 1 << (pow + 1) <= n; ++pow);
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)
d[i][j][k] = max(d[i][j][k - 1], d[i + v][j][k - 1], d[i][j + v][k - 1], d[i + v][j + v][k - 1]);
}
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d", &x, &y, &z);
for (pow = 0; 1 << (pow + 1) < z; ++pow);
int v = 1 << pow;
printf("%d\n", max(d[x][y][pow], d[x][y + z - v][pow], d[x + z - v][y][pow], d[x + z - v][y + z - v][pow]));
}
}