Pagini recente » Cod sursa (job #3238800) | Cod sursa (job #3218886) | Cod sursa (job #2815102) | Cod sursa (job #1526594) | Cod sursa (job #2151478)
#include <cstdio>
const int MAXN = 5e2;
#define MAXLOG 10
int rmq[MAXN + 1][MAXN + 1][MAXLOG + 1], lg[MAXLOG + 1], p2[MAXLOG + 1];
static inline int max(int a, int b) {
return a > b ? a : b;
}
int main() {
FILE *fin, *fout;
int n, m, x, y, k, p;
fin = fopen("plantatie.in", "r");
fscanf(fin, "%d%d", &n, &m);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
fscanf(fin, "%d", &rmq[i][j][0]);
}
}
for (int i = 2; i <= n; ++i) {
lg[i] = lg[i >> 1] + 1;
}
p2[0] = 1;
for (int i = 1; i <= lg[n]; ++i) {
p2[i] = p2[i - 1] << 1;
}
for (int k = 1; k <= lg[n]; ++k) {
for (int i = 1; i + p2[k - 1] <= n; ++i) {
for (int j = 1; j + p2[k - 1] <= n; ++j) {
rmq[i][j][k] = max(rmq[i][j][k - 1], max(rmq[i + p2[k - 1]][j][k - 1],
max(rmq[i][j + p2[k - 1]][k - 1], rmq[i + p2[k - 1]][j + p2[k - 1]][k - 1])));
}
}
}
fout = fopen("plantatie.out", "w");
for (int i = 0; i < m; ++i) {
fscanf(fin, "%d%d%d", &x, &y, &k);
p = lg[k];
fprintf(fout, "%d\n", max(rmq[x][y][p], max(rmq[x + k - p2[p]][y][p],
max(rmq[x][y + k - p2[p]][p], rmq[x + k - p2[p]][y + k - p2[p]][p]))));
}
fclose(fin);
fclose(fout);
return 0;
}