Pagini recente » Cod sursa (job #299722) | Cod sursa (job #2582528) | Cod sursa (job #878286) | Cod sursa (job #1166327) | Cod sursa (job #110219)
Cod sursa(job #110219)
#include <cstdio>
const int MAX_N = 512;
const int LOG_N = 10;
int n, A[MAX_N][MAX_N], max[MAX_N][MAX_N][LOG_N];
int P2[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
int main() {
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int t;
scanf("%d %d", &n, &t);
int i, j, k, ln = 10;
for (i = 0; i < n; ++ i)
for (j = 0; j < n; ++ j) {
scanf("%d", &A[i][j]);
max[i][j][0] = A[i][j];
}
/*for (i = 0; i < n; ++ i) {
for (j = 0; j < n; ++ j)
printf("%d ", A[i][j]);
printf("\n");
}*/
for (k = 1; k < ln; ++ k)
for (i = 0; i < n; ++ i)
for (j = 0; j < n; ++ j) {
max[i][j][k] = max[i][j][k - 1];
if (i + P2[k - 1] < n && max[i][j][k] < max[i + P2[k - 1]][j][k - 1])
max[i][j][k] = max[i + P2[k - 1]][j][k - 1];
if (j + P2[k - 1] < n && max[i][j][k] < max[i][j + P2[k - 1]][k - 1])
max[i][j][k] = max[i][j + P2[k - 1]][k - 1];
if (i + P2[k - 1] < n && j + P2[k - 1] < n && max[i][j][k] < max[i + P2[k - 1]][j + P2[k - 1]][k - 1])
max[i][j][k] = max[i + P2[k - 1]][j + P2[k - 1]][k - 1];
}
/*for (k = 0; k < ln; ++ k) {
printf("%d\n", k);
for (i = 0; i < n; ++ i) {
for (j = 0; j < n; ++ j)
printf("%d ", max[i][j][k]);
printf("\n");
}
}*/
int m;
for (; t > 0; -- t) {
scanf("%d %d %d", &i, &j, &k);
-- i, -- j;
for (ln = 0; P2[ln] <= k && ln < LOG_N; ++ ln)
;
-- ln;
m = max[i][j][ln];
if (m < max[i + k - P2[ln]][j][ln])
m = max[i + k - P2[ln]][j][ln];
if (m < max[i][j + k - P2[ln]][ln])
m = max[i][j + k - P2[ln]][ln];
if (m < max[i + k - P2[ln]][j + k - P2[ln]][ln])
m = max[i + k - P2[ln]][j + k - P2[ln]][ln];
printf("%d\n", m);
}
return 0;
}