Pagini recente » Cod sursa (job #2386667) | Cod sursa (job #169220) | Cod sursa (job #1427177) | Cod sursa (job #457426) | Cod sursa (job #1991272)
#include <stdio.h>
#define max(a, b) (((a) < (b)) ? (b) : (a))
#define MAX 505
#define NMAX 9
int n, m, x, y, k, rmq[NMAX][MAX][MAX];
int logg[NMAX];
void constrRMQ(){
for(int k = 1; k <= logg[n]; ++k){
int depl = (1<<(k - 1));
int prag = n - (1<<k) + 1;
for(int i = 1; i <= prag; ++i)
for(int j = 1; j <= prag; ++j){
rmq[k][i][j] = max( max(rmq[k - 1][i][j], rmq[k - 1][i][j + depl]),
max(rmq[k - 1][i + depl][j], rmq[k - 1][i + depl][j + depl]));
}
}
}
int query(int x, int y, int k){
int d = logg[k], depl = k - (1<<d);
return max( max(rmq[d][x][y], rmq[d][x][y + depl]),
max(rmq[d][x + depl][y], rmq[d][x + depl][y + depl]));
}
int main(){
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
scanf("%d", &rmq[0][i][j]);
printf("%d ", rmq[0][i][j]);
}
printf("\n");
}
logg[1] = 0;
for(int i = 2; i <= n; ++i)
logg[i] = logg[i / 2] + 1;
constrRMQ();
for(int i = 0; i < m; ++i){
scanf("%d%d%d", &x, &y, &k);
printf("%d\n", query(x, y, k));
}
return 0;
}