Pagini recente » Monitorul de evaluare | Cod sursa (job #222583) | Cod sursa (job #423866) | Cod sursa (job #2904987) | Cod sursa (job #1258157)
#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;
for (int k = 0; k < 10; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (k) {
a[i][j][k] = a[i][j][k - 1];
if (i + (1 << (k - 1)) < n) {
a[i][j][k] = std::max(a[i][j][k], a[i + (1 << (k - 1))][j][k - 1]);
}
if (j + (1 << (k - 1)) < n) {
a[i][j][k] = std::max(a[i][j][k], a[i][j + (1 << (k - 1))][k - 1]);
}
if (i + (1 << (k - 1)) < n && j + (1 << (k - 1)) < n) {
a[i][j][k] =
std::max(a[i][j][k],
a[i + (1 << (k - 1))][j + (1 << (k - 1))][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;
}