Cod sursa(job #19225)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 18 februarie 2007 22:30:55
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>

#define pt(i) (1<<(i))
#define pmax 9
#define nmax 512
#define FOR(i,s,d) for(i=(s);i<(d);++i)

int n,m,A[pmax][nmax][nmax];

int MAX(int a,int b)
{
	return a>b?a:b;
}

int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	int l,j,i,ii,c;
	scanf("%d %d",&n,&m);
	FOR(i,0,n) FOR(j,0,n)
		scanf("%d",&A[0][i][j]);
	FOR(l,0,pmax-1) FOR(i,0,n-pt(l)) FOR(j,0,n-pt(l))
		A[l+1][i][j]=MAX(MAX(A[l][i][j],A[l][i][j+pt(l)]),
				MAX(A[l][i+pt(l)][j],A[l][i+pt(l)][j+pt(l)]));
	FOR(ii,0,m)
	{
		scanf("%d %d %d",&i,&j,&c);
		i--,j--;
		for(l=pmax-1;pt(l)>c;l--);
		printf("%d\n",MAX(MAX(A[l][i][j],A[l][i][j+c-pt(l)]),
					MAX(A[l][i+c-pt(l)][j],A[l][i+c-pt(l)][j+c-pt(l)])));
	}		
	return 0;
}