Pagini recente » Cod sursa (job #310664) | Cod sursa (job #2709488) | Cod sursa (job #482579) | Cod sursa (job #1281694) | Cod sursa (job #1258200)
#include <iostream>
#include <fstream>
#include <algorithm>
int a[501][501][10];
int lg2pre[501];
int main()
{
std::ifstream in("plantatie.in");
std::ofstream out("plantatie.out");
int n, m;
in >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
in >> a[i][j][0];
}
}
for (int i = 2; i <= 500; ++i) lg2pre[i] = lg2pre[i / 2] + 1;
for (int k = 1; k <= lg2pre[n]; ++k) {
int q = 1 << (k - 1);
for (int i = 0; i < n - q; ++i) {
for (int j = 0; j < n - q; ++j) {
a[i][j][k] =
std::max(std::max(a[i][j][k - 1], a[i + q][j][k - 1]),
std::max(a[i][j + q][k - 1], a[i + q][j + q][k - 1]));
}
}
}
for (int i = 0; i < m; ++i) {
int ri, ci, l;
in >> ri >> ci >> l;
ri--;
ci--;
int k = lg2pre[l];
int delta = l - (1 << lg2pre[l]);
out << std::max(
std::max(a[ri][ci][k], a[ri + delta][ci][k]),
std::max(a[ri][ci + delta][k], a[ri + delta][ci + delta][k]))
<< std::endl;
}
in.close();
out.close();
return 0;
}