Pagini recente » Cod sursa (job #1746977) | Cod sursa (job #2699730) | Cod sursa (job #2660180) | Cod sursa (job #2244285) | Cod sursa (job #3232340)
#include <fstream>
#include <cmath>
using namespace std;
const int MAXN = 505, MAXLOG = 10;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int sparseTable[MAXLOG][MAXN][MAXN],n, m;
int query(int row, int col, int length) {
int logLength =(int) log2(length);
return max(
max(sparseTable[logLength][row][col], sparseTable[logLength][row + length - (1 << logLength)][col]),
max(sparseTable[logLength][row][col + length - (1 << logLength)], sparseTable[logLength][row + length - (1 << logLength)][col + length - (1 << logLength)])
);
}
int main() {
f >> n >> m;
for (int row = 1; row <= n; ++row) {
for (int col = 1; col <= n; ++col) {
f >> sparseTable[0][row][col];
}
}
for (int k = 1; (1 << k) <= n; ++k) {
for (int row = n - (1 << k) + 1; row >= 1; --row) {
for (int col = n - (1 << k) + 1; col >= 1; --col) {
sparseTable[k][row][col] = max(
max(sparseTable[k-1][row][col], sparseTable[k-1][row][col + (1 << (k-1))]),
max(sparseTable[k-1][row + (1 << (k-1))][col], sparseTable[k-1][row + (1 << (k-1))][col + (1 << (k-1))])
);
}
}
}
while (m--) {
int i, j, k;
f >> i >> j >> k;
g << query(i, j, k) << "\n";
}
return 0;
}