Pagini recente » Cod sursa (job #114891) | Cod sursa (job #2753847) | Cod sursa (job #1181106) | Cod sursa (job #2990713) | Cod sursa (job #1258164)
#include <iostream>
#include <fstream>
int a[501][501][10];
int main()
{
std::ifstream in("plantatie.in");
std::ofstream out("plantatie.out");
int n, m;
in >> n >> m;
int kl = 0;
while ((1 << (kl + 1)) <= n) {
kl++;
}
for (int k = 0; k <= kl; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (k) {
int p = 1 << (k - 1);
a[i][j][k] = a[i][j][k - 1];
if (i + p < n) {
a[i][j][k] = std::max(a[i][j][k], a[i + p][j][k - 1]);
if (j + p < n) {
a[i][j][k] = std::max(a[i][j][k], a[i + p][j + p][k - 1]);
}
}
if (j + p < n) {
a[i][j][k] = std::max(a[i][j][k], a[i][j + p][k - 1]);
}
} else if (k == 0) {
in >> a[i][j][0];
}
}
}
}
for (int i = 0; i < m; ++i) {
int ri, ci, l;
in >> ri >> ci >> l;
ri--;
ci--;
int k = 0;
while ((1 << (k + 1)) <= l) k++;
out << std::max(
std::max(a[ri][ci][k], a[ri + l - (1 << k)][ci][k]),
std::max(a[ri][ci + l - (1 << k)][k],
a[ri + l - (1 << k)][ci + l - (1 << k)][k])) << std::endl;
}
in.close();
out.close();
return 0;
}