Pagini recente » Cod sursa (job #3153965) | Cod sursa (job #2625117) | Cod sursa (job #185031) | Cod sursa (job #349699) | Cod sursa (job #3190732)
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int n, t;
int rmq[9][501][501];
int E[501];
int maxim(int a, int b, int c, int d) {
return max(max(a, b), max(c, d));
}
int main() {
cin >> n >> t;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) cin >> rmq[0][i][j];
for (int p = 1; (1 << p) <= n; p++) {
int len = (1 << p);
for (int i = 1; i + len - 1 <= n; i++) {
for (int j = 1; j + len - 1 <= n; j++) {
int lungimeNoua = (len >> 1);
rmq[p][i][j] = maxim(rmq[p - 1][i][j], rmq[p - 1][i + lungimeNoua][j], rmq[p - 1][i][j + lungimeNoua], rmq[p - 1][i + lungimeNoua][j + lungimeNoua]);
}
}
}
//precalc cea mai mare putere de 2
E[1] = 0;
for (int i = 2; i <= 500; i++) E[i] = 1 + E[i / 2];
//
for (int q = 0; q < t; q++) {
int i, j, len;
cin >> i >> j >> len;
int putereMaxima = E[len], lungimeNoua = (len >> 1);
cout << maxim(rmq[putereMaxima][i][j], rmq[putereMaxima][i + lungimeNoua][j], rmq[putereMaxima][i][j + lungimeNoua], rmq[putereMaxima][i + lungimeNoua][j + lungimeNoua]) << '\n';
}
}