Pagini recente » Cod sursa (job #2374766) | Cod sursa (job #698765) | Cod sursa (job #2904997) | Cod sursa (job #2584974) | Cod sursa (job #2738746)
#include <fstream>
using namespace std;
const int N = 500;
const int LOG = 9;
int v[N + 1][N + 1], r[LOG][N + 1][N + 1], log2[N + 1];
inline int max(int a, int b, int c, int d) {
return max(max(a, b), max(c, d));
}
int main() {
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n, q;
in >> n >> q;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
in >> v[i][j];
for (int l = 1; l <= n; ++l)
for (int c = 1; c <= n; ++c) {
r[0][l][c] = v[l][c];
int i = 1, p2 = 2;
while (p2 <= min(l, c)) {
r[i][l][c] = max(r[i - 1][l][c], r[i - 1][l - p2 / 2][c], r[i - 1][l][c - p2 / 2], r[i - 1][l - p2 / 2][c - p2 / 2]);
++i, p2 *= 2;
}
}
for (int i = 2; i <= n; ++i)
log2[i] = log2[i / 2] + 1;
int x, y, k;
while (q--) {
in >> x >> y >> k;
x += k - 1;
y += k - 1;
int lg = log2[k], p2 = (1 << lg);
out << max(r[lg][x][y], r[lg][x - k + p2][y], r[lg][x][y - k + p2], r[lg][x - k + p2][y - k + p2]) << '\n';
}
in.close();
out.close();
return 0;
}