Pagini recente » Cod sursa (job #2881952) | Cod sursa (job #1391156) | Cod sursa (job #939043) | Cod sursa (job #3245980) | Cod sursa (job #2347647)
#include <bits/stdc++.h>
#define MAX 500
using namespace std;
int RMQ[32][MAX][MAX];
int N;
int max4(int a, int b, int c, int d){
int mmax = max(a, b);
mmax = max(mmax, c);
mmax = max(mmax, d);
return mmax;
}
void rangeminimumquery(){
for (int k = 1; (1 << k) <= N; ++k){
for (int i = N - (1 << k) + 1; i >= 1; --i){
for (int j = N - (1 << k) + 1; j >= 1; --j){
int rq = (1 << (k - 1));
RMQ[k][i][j] = max4(RMQ[k - 1][i][j], RMQ[k - 1][i + rq][j], RMQ[k - 1][i][j + rq], RMQ[k - 1][i + rq][j + rq]);
}
}
}
}
int solve(int x, int y, int k){
int l = log2(k);
int rq = (1 << l);
int mmax = max4(RMQ[l][x][y], RMQ[l][x + k - rq][y], RMQ[l][x][y + k - rq], RMQ[l][x + k - rq][y + k - rq]);
return mmax;
}
int main(){
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int Q;
scanf("%d%d", &N, &Q);
for (int i = 1; i <= N; ++i){
for (int j = 1; j <= N; ++j){
scanf("%d", &RMQ[0][i][j]);
}
}
rangeminimumquery();
for (int i = 1; i <= Q; ++i){
int line, col, k;
scanf("%d%d%d", &line, &col, &k);
printf("%d\n", solve(line, col, k));
}
return 0;
}