Pagini recente » Cod sursa (job #2069908) | Cod sursa (job #615080) | Cod sursa (job #1781364) | Cod sursa (job #586410) | Cod sursa (job #3304459)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e2;
int a[NMAX + 1][NMAX + 1], RMQ[NMAX + 1][NMAX + 1][10];
int query(int x1, int y1, int k) {
int x2 = x1 + k - 1;
int y2 = y1 + k - 1;
int L = int(log2(k));
if(k == (1 << L)) {
L--;
}
return max(max(RMQ[x1][y1][L], RMQ[x2 - (1 << L) + 1][y1][L]),
max(RMQ[x1][y2 - (1 << L) + 1][L], RMQ[x2 - (1 << L) + 1][y2 - (1 << L) + 1][L]));
}
int main() {
ifstream cin("plantatie.out");
ofstream cout("plantatie.out");
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cin >> a[i][j];
//cout << a[i][j] << ' ';
RMQ[i][j][0] = a[i][j];
}
//cout << '\n';
}
for(int k = 1; k <= ceil(log2(n)); k++) {
for(int i = 1; i <= n - (1 << k) + 1; i++) {
for(int j = 1; j <= n - (1 << k) + 1; j++) {
RMQ[i][j][k] = max(max(RMQ[i][j][k - 1], RMQ[i + (1 << (k - 1))][j][k - 1]),
max(RMQ[i][j + (1 << (k - 1))][k - 1], RMQ[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
}
}
}
while(m--) {
int x, y, k;
cin >> x >> y >> k;
//cout << x << ' ' << y << ' ' << k << '\n';
cout << query(x, y, k) << '\n';
}
return 0;
}