Pagini recente » Cod sursa (job #2552292) | Cod sursa (job #2170206) | Cod sursa (job #3283658) | Cod sursa (job #1050738) | Cod sursa (job #178934)
Cod sursa(job #178934)
#include<stdio.h>
inline int max(int a,int b){
return a>b?a:b ;
}
int a[500][500][10],v[500][500],lg[500];
int main () {
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int i,j,k,n,m,x,y,z,maxim;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d",&v[i][j]);
for(i=2;i<=n;++i)
lg[i]=lg[i>>1]+1;
for(i=n;i>0;--i)
for(j=n;j>0;--j){
a[i][j][0]=v[i][j];
for(k=1;i+(1<<k)<=n+1&&j+(1<<k)<=n+1;++k){
a[i][j][k]=max(a[i][j][k-1],a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
a[i][j][k]=max(a[i][j][k],a[i+(1<<(k-1))][j][k-1]);
a[i][j][k]=max(a[i][j][k],a[i][j+(1<<(k-1))][k-1]);
}
}
for(i=0;i<m;++i){
scanf("%d%d%d",&x,&y,&z);
j=lg[z];
maxim=max(a[x][y][j],a[x+z-(1<<j)][y][j]);
maxim=max(maxim,a[x][y+z-(1<<j)][j]);
maxim=max(maxim,a[x+z-(1<<j)][y+z-(1<<j)][j]);
printf("%d\n",maxim);
}
return 0;
}