Pagini recente » Cod sursa (job #128706) | Cod sursa (job #622654) | Cod sursa (job #2665475) | Cod sursa (job #2520076) | Cod sursa (job #1258173)
#include <iostream>
#include <fstream>
int a[501][501][10];
// The square at (l, c) with side 2^k always fits.
int get(int l, int c, int k) {
if (k == 0 || a[l][c][k]) {
return a[l][c][k];
}
int p = 1 << (k - 1);
return a[l][c][k] = std::max(
std::max(get(l, c, k - 1), get(l + p, c, k - 1)),
std::max(get(l, c + p, k - 1), get(l + p, c + p, k - 1)));
}
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 = 0; i < m; ++i) {
int ri, ci, l;
in >> ri >> ci >> l;
ri--;
ci--;
int k = 0;
while ((1 << (k + 1)) <= l) k++;
int delta = l - (1 << k);
out << std::max(
std::max(get(ri, ci, k), get(ri + delta, ci, k)),
std::max(get(ri, ci + delta, k), get(ri + delta, ci + delta, k)))
<< std::endl;
}
in.close();
out.close();
return 0;
}