Pagini recente » Cod sursa (job #1381007) | Cod sursa (job #942990) | Cod sursa (job #1791053) | Cod sursa (job #570431) | Cod sursa (job #21346)
Cod sursa(job #21346)
#include <cstdio>
const int NMAX = 512;
const int LGMAX = 10;
int N, M;
int A[LGMAX][NMAX][NMAX];
void make_RMQ() {
int i, j, k, stop, top, d;
for (stop = 1, k = N; k; ++stop, k >>= 1);
for (k = 1; k <= stop; ++k) {
top = N - (1 << k) + 1;
d = 1 << (k - 1);
for (i = 1; i <= top; ++i) {
for (j = 1; j <= top; ++j) {
A[k][i][j] = A[k - 1][i][j];
A[k][i][j] >?= A[k - 1][i + d][j];
A[k][i][j] >?= A[k - 1][i][j + d];
A[k][i][j] >?= A[k - 1][i + d][j + d];
// printf("%d ", A[k][i][j]);
}
// printf("\n");
}
// printf("\n");
}
}
int query(int u, int v, int d) {
int i, k, ret;
for (i = 1, k = 0; (i << 1) < d; i <<= 1, ++k);
ret = A[k][u][v];
ret >?= A[k][u + d - i][v];
ret >?= A[k][u][v + d - i];
ret >?= A[k][u + d - i][v + d - i];
return ret;
}
int main() {
FILE *fin = fopen("plantatie.in", "rt");
FILE *fout = fopen("plantatie.out", "wt");
int i, j, u, v, d;
fscanf(fin, " %d %d", &N, &M);
for (i = 1; i <= N; ++i)
for (j = 1; j <= N; ++j)
fscanf(fin, " %d", &A[0][i][j]);
make_RMQ();
for (i = 0; i < M; ++i) {
fscanf(fin, " %d %d %d", &u, &v, &d);
fprintf(fout, "%d\n", query(u, v, d));
}
fclose(fin);
fclose(fout);
return 0;
}