Pagini recente » Cod sursa (job #2633257) | Cod sursa (job #69367) | Cod sursa (job #1942800) | Cod sursa (job #911954) | Cod sursa (job #2954280)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int n,q;
int x, y, k;
int a[500][500];
int rmq[12][500][500];
void compute_rmq() {
for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) rmq[0][i][j] = a[i][j];
for (int p = 1; p <= log2(n); p++) {
for (int i = (1 << p) - 1; i < n; i++) for (int j = (1 << p) - 1; j < n; j++) {
rmq[p][i][j] = max(max( rmq[p-1][i][j]
,rmq[p-1][i - (1 << (p-1))][j - (1 << (p - 1))]),
max(rmq[p - 1][i][j - (1 << (p - 1))]
,rmq[p - 1][i - (1 << (p - 1))][j]));
}
}
}
int query(int c1x,int c1y,int c2x,int c2y) {
int p = log2(c2x - c1x + 1);
return max(max(rmq[p][c2x][c2y]
,rmq[p][c1x + (1 << p) - 1][c1y + (1 << p) - 1]),
max(rmq[p][c2x][c1y + (1 << p) - 1]
, rmq[p][c1x + (1 << p) - 1][c2y]));
}
signed main() {
cin >> n>> q;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
compute_rmq();
while (q--) {
cin >> x >> y >> k;
cout << query(x - k + 1, y - k + 1, x, y) << '\n';
}
}