Pagini recente » Cod sursa (job #1867444) | Cod sursa (job #3149780) | Cod sursa (job #2046146) | Cod sursa (job #151845) | Cod sursa (job #183579)
Cod sursa(job #183579)
#include <stdio.h>
#define max(a,b) ((a>b)?a:b)
long n,m,l,i,j,k,aux,x,y;
long lg[505],a[10][505][505];
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
scanf("%ld",&a[0][i][j]);
//preproc
for (i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
l=lg[n];
for (k=1;k<=l;k++)
for (i=1; i+(1<<k)-1<=n ;i++)
for (j=1; j+(1<<k)-1<=n ;j++){
a[k][i][j]=max(a[k-1][i][j],a[k-1][i+(1<<(k-1))][j]);
a[k][i][j]=max(a[k][i][j], a[k-1][i][j+(1<<(k-1))]);
a[k][i][j]=max(a[k][i][j],a[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
}
for (;m;--m){
scanf("%ld %ld %ld\n",&x,&y,&l);
k=lg[l];
aux=max(a[k][x][y],a[k][x+l-(1<<k)][y]);
aux=max(aux,a[k][x][y+l-(1<<k)]);
aux=max(aux,a[k][x+l-(1<<k)][y+l-(1<<k)]);
printf("%ld\n",aux);
}
return 0;
}