Pagini recente » Cod sursa (job #2414262) | Cod sursa (job #678985) | Cod sursa (job #1567266) | Cod sursa (job #2178249) | Cod sursa (job #2891663)
#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<int> > rmq(int(log2(2 * n)) + 1, std::vector<int>(n * n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
rmq[0][i * n + j] = map[i][j];
}
}
for (int k = 1; k < int(rmq.size()); ++k) {
int pass = (1 << (k - 1));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
rmq[k][i * n + j] = rmq[k - 1][i * n + j];
if (i + pass < n) {
rmq[k][i * n + j] = std::max(rmq[k][i * n + j], rmq[k - 1][(i + pass) * n + j]);
if (j + pass < n) {
rmq[k][i * n + j] = std::max(rmq[k][i * n + j], rmq[k - 1][(i + pass) * n + (j + pass)]);
}
}
if (j + pass < n) {
rmq[k][i * n + j] = std::max(rmq[k][i * n + j], rmq[k - 1][i * n + (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 * n + j], std::max(rmq[lg2][(i + l - pass) * n + j], std::max(rmq[lg2][i * n + (j + l - pass)], rmq[lg2][(i + l - pass) * n + (j + l - pass)]))) << "\n";
}
return 0;
}