Pagini recente » Borderou de evaluare (job #2247273) | Cod sursa (job #2622230) | Arhiva educaţională | Cod sursa (job #1003191) | Cod sursa (job #665194)
Cod sursa(job #665194)
#include <stdio.h>
#define NMAX 501
#define LMax 10
int lg[LMax], A[LMax][NMAX][NMAX];
inline int max(int x, int y)
{
return (x>y)?x:y;
}
int main()
{
freopen("plantatie.in", "r", stdin); freopen("plantatie.out", "w", stdout);
int i, j, k, n, m, x, y;
scanf("%d %d", &n, &m);
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
scanf("%d", &A[0][i][j]);
lg[1] = 0;
for (i=2; i<=n; ++i) lg[i] = lg[i/2] + 1;
for (j=1; (1<<j) <= n; ++j)
for (i=1; i + (1<<j) - 1 <= n; ++i)
for (k=1; k + (1<<j) - 1 <= n; ++k) {
A[j][i][k] = max (A[j-1][i][k], max(A[j-1][i + (1<<(j-1))][k],
max(A[j-1][i][k + (1<<(j-1))], A[j-1][i + (1<<(j-1))][k + (1<<(j-1))])));
}
for (i=1; i<=m; ++i) {
scanf("%d %d %d", &x, &y, &k);
int y1 = k + y;
int x1 = k + x;
int SOL = max(A[lg[k]][x][y], max(A[lg[k]][x1 - (1<<lg[k])][y],
max(A[lg[k]][x][y1 - (1<<lg[k])], A[lg[k]][x1 - (1<<lg[k])][y1 - (1<<lg[k])])));
printf("%d\n", SOL);
}
return 0;}