Pagini recente » Cod sursa (job #3164028) | Cod sursa (job #1650841) | Cod sursa (job #100900) | Cod sursa (job #198969) | Cod sursa (job #634972)
Cod sursa(job #634972)
#include <stdio.h>
#define NMAX 503
#define LgMax 10
int A[NMAX][NMAX];
int lg[LgMax];
int RMQ[LgMax][NMAX][NMAX];
inline int max(int a, int b)
{
return (a>b)?a:b;
}
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[i][j]);
lg[1] = 0;
for (i=2; i<=n; ++i)
lg[i] = lg[i/2] + 1;
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
RMQ[0][i][j] = A[i][j];
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) {
RMQ[j][i][k] = max(RMQ[j-1][i][k], max(RMQ[j-1][i + (1<<(j-1))][k],
max(RMQ[j-1][i][k + (1<<(j-1))],
RMQ[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 res = max(RMQ[lg[k]][x][y], max(RMQ[lg[k]][x1 - (1<<lg[k])][x],
max(RMQ[lg[k]][x][y1 - (1<<lg[k])], RMQ[lg[k]][x1 - (1<<lg[k])][y1 - (1<<lg[k])])));
printf("%d\n", res);
}
return 0;
}