Pagini recente » Cod sursa (job #2848439) | Cod sursa (job #838155) | Cod sursa (job #237731) | Cod sursa (job #2621692) | Cod sursa (job #2891671)
#include <bits/stdc++.h>
std::ifstream fin("plantatie.in");
std::ofstream fout("plantatie.out");
int main() {
int n, m;
fin >> n >> m;
std::vector<std::vector<int>> map(n, std::vector<int>(n));
for (auto& i:map) {
for (auto& j:i) {
fin >> j;
}
}
std::vector<std::vector<std::vector<int>>> rmq(int(log2(2 * n)), std::vector<std::vector<int>>(n, std::vector<int>(n)));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
rmq[0][i][j] = map[i][j];
}
}
int sz = int(rmq.size());
for (int k = 1; k < sz; ++k) {
int pass = (1 << (k - 1));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
rmq[k][i][j] = rmq[k - 1][i][j];
if (i + pass < n) {
rmq[k][i][j] = std::max(rmq[k][i][j], rmq[k - 1][i + pass][j]);
if (j + pass < n) {
rmq[k][i][j] = std::max(rmq[k][i][j], rmq[k - 1][i + pass][j + pass]);
}
}
if (j + pass < n) {
rmq[k][i][j] = std::max(rmq[k][i][j], rmq[k - 1][i][j + pass]);
}
}
}
}
while (m--) {
int i, j, l;
fin >> i >> j >> l;
--i; --j;
int lg2 = int(log2(l));
int pass = (1 << lg2);
fout << std::max(rmq[lg2][i][j], std::max(rmq[lg2][i + l - pass][j], std::max(rmq[lg2][i][j + l - pass], rmq[lg2][i + l - pass][j + l - pass]))) << "\n";
}
return 0;
}