Pagini recente » Cod sursa (job #346108) | Cod sursa (job #2780758) | Cod sursa (job #2661147) | Cod sursa (job #216544) | Cod sursa (job #3228695)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int NMAX = 500;
int n, query, a[NMAX][NMAX], rmq[NMAX][NMAX][9];
void read() {
cin >> n >> query;
for (int index1 = 0; index1 < n; ++index1) {
for (int index2 = 0; index2 < n; ++index2) {
cin >> a[index1][index2];
rmq[index1][index2][0] = a[index1][index2];
}
}
}
void compute() {
int target = log2(n);
for (int p = 1; p <= target; ++p) {
for (int i = 0; i + (1 << p) <= n; ++i) {
for (int j = 0; j + (1 << p) <= n; ++j) {
int r1 = rmq[i][j][p - 1];
int r2 = rmq[i][j + (1 << (p - 1))][p - 1];
int r3 = rmq[i + (1 << (p - 1))][j][p - 1];
int r4 = rmq[i + (1 << (p - 1))][j + (1 << (p - 1))][p - 1];
rmq[i][j][p] = max(max(r1, r2), max(r3, r4));
}
}
}
}
int rectangleQuery(int i, int j, int lenght) {
int log = log2(lenght);
int r1 = rmq[i][j][log];
int r2 = rmq[i][j + lenght - (1 << log)][log];
int r3 = rmq[i + lenght - (1 << log)][j][log];
int r4 = rmq[i + lenght - (1 << log)][j + lenght - (1 << log)][log];
return max(max(r1, r2), max(r3, r4));
}
void solve() {
int i, j, k;
cin >> i >> j >> k;
cout << rectangleQuery(i - 1, j - 1, k) << '\n';
}
int main() {
read();
compute();
while (query--) {
solve();
}
return 0;
}