Pagini recente » Cod sursa (job #2861539) | Cod sursa (job #1390914) | Cod sursa (job #2439949) | Cod sursa (job #720056) | Cod sursa (job #961069)
Cod sursa(job #961069)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int MAX_N = 505;
const int MAX_LOG = 15;
int rm[MAX_LOG][MAX_N][MAX_N];
int log_2[MAX_N];
int main() {
int N, M;
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= N; ++j) {
fin >> rm[0][i][j];
}
}
for (int l = 1; (1 << l) <= N; ++l) {
for (int i = 1; i + (1 << l) - 1 <= N; ++i) {
for (int j = 1; j + (1 << l) - 1 <= N; ++j) {
rm[l][i][j] = max(
max(
rm[l - 1][i + (1 << (l - 1))][j],
rm[l - 1][i][j + (1 << (l - 1))]),
max(
rm[l - 1][i][j],
rm[l - 1][i + (1 << (l - 1))][j + (1 << (l - 1))]));
}
}
}
log_2[1] = 0;
for (int i = 2; i <= N; ++i) {
log_2[i] = log_2[i / 2] + 1;
}
for (int i = 1, x, y, h; i <= M; ++i) {
fin >> x >> y >> h;
int k = log_2[h];
fout << max(
max(
rm[k][x][y],
rm[k][x + h - (1 << k)][y + h - (1 << k)]),
max(
rm[k][x + h - (1 << k)][y],
rm[k][x][y + h - (1 << k)]));
fout << '\n';
}
return 0;
}