Cod sursa(job #19989)

Utilizator slayer4uVictor Popescu slayer4u Data 20 februarie 2007 15:01:25
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

int i,j,k,q,n,m,x,y,a[12][512][512];

inline int maxim(int x,int y) 
{
       return x>y?x:y; 
}      

int main()
{
	freopen("plantatie.in","rt",stdin);
	freopen("plantatie.out","wt",stdout);
	
	scanf("%d %d",&n,&m);
	
    for (i=0;i<n;++i)
		for (j=0;j<n;++j)
			scanf("%d ",&a[0][i][j]);
	
    for (k=1;(1<<k)<=n;++k)
		for (i=0;i<=n;++i)	
			for (j=0;j<=n;++j)
            	a[k][i][j] = maxim( maxim(a[k-1][i][j],a[k-1][i+(1<<(k-1))][j]) , maxim(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",maxim(maxim(a[nr][x][y],a[nr][x+k-q][y]),maxim(a[nr][x][y+k-q],a[nr][x+k-q][y+k-q])));
	
    }
	
	return 0;
}