Pagini recente » Cod sursa (job #352977) | Cod sursa (job #2586842) | Cod sursa (job #2291597) | Cod sursa (job #619346) | Cod sursa (job #19416)
Cod sursa(job #19416)
#include <stdio.h>
#define maxn 510
#define maxl 10
int n,m;
int a[maxl][maxn][maxn];
int T[maxn];
int max(int a,int b,int c,int d)
{
if ((a>=b) && (a>=c) && (a>=d)) return a;
if ((b>=a) && (b>=c) && (b>=d)) return b;
if ((c>=a) && (c>=b) && (c>=d)) return c;
if ((d>=a) && (d>=b) && (d>=c)) return d;
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d %d",&n,&m);
int i,j,k,x,y,z,t,aux;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) scanf("%d ",&a[0][i][j]);
for (k=1;k<maxl;k++)
{
aux=1<<(k-1);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
x=a[k-1][i][j];
if (i+aux>n) y=0;
else y=a[k-1][i+aux][j];
if (j+aux>n) z=0;
else z=a[k-1][i][j+aux];
if ((j+aux>n) || (i+aux>n)) t=0;
else t=a[k-1][i+aux][j+aux];
a[k][i][j]=max(x,y,z,t);
}
}
T[1]=0;
for (i=2;i<=n;i++)
if (1<<(T[i-1]+1)<=i) T[i]=T[i-1]+1;
else T[i]=T[i-1];
for (i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&z);
aux=(1<<T[z]);
printf("%d\n",max(a[T[z]][x][y],a[T[z]][x+z-aux][y],a[T[z]][x][y+z-aux],a[T[z]][x+z-aux][y+z-aux]));
}
return 0;
}