Pagini recente » Cod sursa (job #2267088) | Cod sursa (job #1020576) | Cod sursa (job #3263563) | Cod sursa (job #1398067) | Cod sursa (job #2101395)
#include <iostream>
#include <fstream>
#include <cmath>
#define N 501
#define MXLG 9
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n, m, a[N][N], rmq[N][N][MXLG];
int init_rmq() {
for (int r = 0; r < n; r++) {
for (int i = 0; i < n; i++)
rmq[r][i][0] = i;
for (int j = 1; j <= log2(n); j++) {
for (int i = 0; i + (1 << j) - 1 < n; i++) {
if (a[r][rmq[r][i][j - 1]] > a[r][rmq[r][i + (1 << j - 1)][j - 1]]) {
rmq[r][i][j] = rmq[r][i][j - 1];
} else {
rmq[r][i][j] = rmq[r][i + (1 << j - 1)][j - 1];
}
}
}
}
}
int query(int x, int y, int k) {
x--, y--;
int res = 0;
for (int i = x; i < x + k; i++) {
int p = log2(k);
res = max(res, max(a[i][rmq[i][y][p]], a[i][rmq[i][y + k - (1 << p)][p]]));
}
return res;
}
int main() {
in >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
in >> a[i][j];
}
init_rmq();
int a, b, c;
for (int i = 1; i <= m; i++) {
in >> a >> b >> c;
out << query(a, b, c) << "\n";
}
return 0;
}