Pagini recente » Cod sursa (job #1453573) | Cod sursa (job #328288) | Cod sursa (job #2059689) | Cod sursa (job #356962) | Cod sursa (job #1977912)
#include <stdio.h>
#include <stdlib.h>
int log[501], r[501][501][10];
int max(int a, int b){
if(a>b)
return a;
return b;
}
int query(int i, int j, int x){
int l=log[x], i2=i+x-1, j2=j+x-1;
return max(max(r[i2][j2][l], r[i+(1<<l)-1][j2][l]), max(r[i2][j+(1<<l)-1][l], r[i+(1<<l)-1][j+(1<<l)-1][l]));
}
int main()
{
int n, m, k, i, j, x, y;
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d", &r[i][j][0]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;(1<<k)<=i && (1<<k)<=j;k++)
r[i][j][k]=max(max(r[i][j][k-1], r[i-(1<<(k-1))][j][k-1]), max(r[i][j-(1<<(k-1))][k-1], r[i-(1<<(k-1))][j-(1<<(k-1))][k-1]));
log[1]=0;
for(i=2;i<=500;i++)
log[i]=1+log[i/2];
for(i=0;i<m;i++){
scanf("%d%d%d", &x, &y, &k);
printf("%d\n", query(x, y, k));
}
return 0;
}