Cod sursa(job #19385)

Utilizator tudalexTudorica Constantin Alexandru tudalex Data 19 februarie 2007 13:52:45
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>


int i,j,k,q,n,m,x,y;

int a[12][512][512];


inline int max(int x,int y) { if (x>y) return x; else return y;}


int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d %d",&n,&m);
	//printf("%d %d\n",n,m);
	for (i=0;i<n;++i)
		for (j=0;j<n;++j)
			scanf("%d ",&a[0][i][j]);
	/*for (i=0;i<n;++i)
	{
		for (j=0;j<n;++j)
			printf("%d ",a[0][i][j]);
		printf("\n");	
	}*/
		for (k=1;(1<<k)<=n;++k)
		for (i=0;i<=n;++i)	
			for (j=0;j<=n;++j)
            	a[k][i][j]=max(max(a[k-1][i][j],a[k-1][i+(1<<(k-1))][j]),max(a[k-1][i][j+(1<<(k-1))],a[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
	for (i=1;i<=m;++i)
	{
		scanf("%d %d %d",&x,&y,&k);
		q=1;
        x--;
        y--;
        int nr=0;
		while (q<=k)
        {
        	nr++;
        	q*=2;
		}
		q/=2;
        nr--;
		
		printf("%d\n",max(max(a[nr][x][y],a[nr][x+k-q][y]),max(a[nr][x][y+k-q],a[nr][x+k-q][y+k-q])));
	}
	
	return 0;
}