Pagini recente » Cod sursa (job #981573) | Cod sursa (job #1692863) | Cod sursa (job #33837) | Cod sursa (job #2758724) | Cod sursa (job #22830)
Cod sursa(job #22830)
#include <stdio.h>
#define max(a, b) ((a > b) ? a : b)
#define NMax 505
int N, S[11][NMax][NMax], lg[NMax];
int main(void)
{
int M, i, j, x, y, l, k, m1, m2;
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", &S[0][i][j]);
for (i = 2; i <= N; i++)
lg[i] = lg[i/2] + 1;
for (k = 1; k <= lg[N]; k++)
for (x = 1; x <= N-(1<<k)+1; x++)
for (y = 1; y <= N-(1<<k)+1; y++)
S[k][x][y] = max(max(S[k-1][x][y], S[k-1][x][y+(1<<(k-1))]),
max(S[k-1][x+(1<<(k-1))][y],
S[k-1][x+(1<<(k-1))][y+(1<<(k-1))]));
for (; M; M--)
{
scanf("%d %d %d", &x, &y, &l);
k = lg[l];
m1 = max(S[k][x][y], S[k][x][y+l-(1<<k)]);
m2 = max(S[k][x+l-(1<<k)][y], S[k][x+l-(1<<k)][y+l-(1<<k)]);
printf("%d\n", max(m1, m2));
}
return 0;
}