Cod sursa(job #385998)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 23 ianuarie 2010 21:21:29
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
int n,m,v[10][505][505],log[505];

inline int max(int a, int b, int c, int d)
{
	if(a<b)
		a=b;
	if(a<c)
		a=c;
	if(a<d)
		a=d;
	return a;
}

int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d%d",&n,&m);
	int i,j,k,lim;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			scanf("%d",&v[0][i][j]);
	for(i=2;i<=n;i++)
		log[i]=log[i>>1]+1;
	for(i=1;i<=10;i++)
	{
		lim=n+1-(1<<i);
		for(j=1;j<=lim;j++)
			for(k=1;k<=lim;k++)
				v[i][j][k]=max(v[i-1][j][k],v[i-1][j+(1<<(i-1))][k],v[i-1][j][k+(1<<(i-1))],v[i-1][j+(1<<(i-1))][k+(1<<(i-1))]);
	}
	int x,y,z,p;
	while(m--)
	{
		scanf("%d%d%d",&x,&y,&z);
		i=log[z];
		p=1<<i;
		printf("%d\n",max(v[i][x][y],v[i][x+z-p][y],v[i][x][y+z-p],v[i][x+z-p][y+z-p]));
	}
	return 0;
}