Pagini recente » Cod sursa (job #100366) | Cod sursa (job #2387482) | Cod sursa (job #1997955) | Cod sursa (job #1120874) | Cod sursa (job #2476190)
#include<cstdio>
#include<algorithm>
const int NMAX=505;
long long mat[NMAX][NMAX][10],logg[NMAX];
int n,m;
inline long long max(long long x, long long y){
if(x>y)
return x;
return y;
}
void logaritm(){
int x=0;
for(int i=0;i<=n;i++)
if((1<<x)>i)
logg[i]=x-1;
else
logg[i]=x++;
}
void rmq(){
for(int i=n;i>=1;i--)
for(int j=n;j>=1;j--)
for(int k=1;i+(1<<k)<=n+1 && j+(1<<k)<=n+1;k++)
mat[i][j][k]=max(max(mat[i][j][k-1], mat[i+(1<<(k-1))][j][k-1]), max(mat[i][j+(1<<(k-1))][k-1], mat[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
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("%lld", &mat[i][j][0]);
rmq();
logaritm();
for(int t=1;t<=m;t++){
int i,j,k;
scanf("%d%d%d", &i, &j, &k);
int l=logg[k];
long long sol=max(max(mat[i][j][l], mat[k-(1<<l)+i][j][l]), max(mat[i][j+k-(1<<l)][l], mat[i+k-(1<<l)][j+k-(1<<l)][l]));
printf("%lld\n", sol);
}
return 0;
}