Cod sursa(job #524165)

Utilizator CBogdanCiobanu Bogdan CBogdan Data 20 ianuarie 2011 15:30:26
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#define max(a,b) a<b?b:a
#define MAX(a,b,c,d) (max(a,b))<(max(c,d))?(max(c,d)):(max(a,b))
using namespace std;

int V[501][501][10],lg[1000],i,j,k,n,m,I,J,L,LG;

void read(),solve();

int main()
{
	read();
	solve();
	return 0;
}


void read()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			scanf("%d",&V[i][j][0]);
	lg[1]=0;
	for(i=2;i<=500;i++)
		lg[i]=lg[i>>2]+1;
}

void solve()
{
	for(k=1;(1<<k)<=500;k++)
		for(i=1;i+(1<<k)-1<=500;i++)
			for(j=1;j+(1<<k)-1<=500;j++)
			{
				L=(1<<(k-1));
				V[i][j][k]=MAX(V[i][j][k-1],V[i][j+L][k-1],V[i+L][j][k-1],V[i+L][j+L][k-1]);
			}
	for(;m;m--)
	{
		scanf("%d%d%d",&i,&j,&k);
		LG=lg[k];
		L=(1<<LG);
		I=i+k;J=j+k;
		printf("%d\n",MAX(V[i][j][LG],V[I-L][j][LG],V[i][J-L][LG],V[I-L][J-L][LG]) );
	}
}