Pagini recente » Cod sursa (job #953980) | Cod sursa (job #76071) | Cod sursa (job #1173172) | Cod sursa (job #874717) | Cod sursa (job #3230205)
#include <iostream>
#include <fstream>
#include <cmath>
#define NMAX 502
#define LOGN 10
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
int rmq[NMAX][NMAX][LOGN][LOGN];
void computeRMQ() {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
fin >> rmq[i][j][0][0];
}
for (int k = 1; k <= LOGN; k++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j <= n; j++) {
rmq[i][j][k][0] = max(rmq[i][j][k - 1][0], rmq[i + (1 << (k - 1))][j][k - 1][0]);
}
for (int k = 1; k <= LOGN; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j + (1 << k) - 1 <= n; j++) {
rmq[i][j][0][k] = max(rmq[i][j][0][k - 1], rmq[i][j + (1 << (k - 1))][0][k - 1]);
}
for (int k = 1; k <= LOGN; k++)
for (int l = 1; l <= LOGN; l++)
for (int i = 1; i + (1 << k) - 1 <= n; i++)
for (int j = 1; j + (1 << l) - 1 <= n; j++) {
rmq[i][j][k][l] = max(max(rmq[i][j][k - 1][l - 1],
rmq[i + (1 << (k - 1))][j][k - 1][l - 1]),
max(rmq[i][j + (1 << (l - 1))][k - 1][l - 1], rmq[i + (1 << (k - 1))][j + (1 << (l - 1))][k - 1][l - 1]));
}
}
int query(int x1, int y1, int x2, int y2) {
int k = log2(x2 - x1 + 1);
int l = log2(y2 - y1 + 1);
return max(max(rmq[x1][y1][k][l], rmq[x2 - (1 << k) + 1][y1][k][l]), max(rmq[x1][y2 - (1 << l) + 1][k][l], rmq[x2 - (1 << k) + 1][y2 - (1 << l) + 1][k][l]));
}
int main() {
fin >> n >> m;
computeRMQ();
for (int i = 1; i <= m; i++) {
int x, y, k;
fin >> x >> y >> k;
int x2 = x + k - 1;
int y2 = y + k - 1;
fout << query(x, y, x2, y2) << '\n';
}
}