Cod sursa(job #534108)

Utilizator ConsstantinTabacu Raul Consstantin Data 15 februarie 2011 10:47:36
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<stdio.h>

int v[510][510][10],i,j,k,l,m,n;

int max(int a,int b,int c,int d){
	if(b>a)a=b;
	if(d>c)c=d;
	if(a>c)return a;
	return c;
}
int po(int k){
	return 1<<k;
}
void solve(){
int i,j,k;
for(k = 1; po(k) <= n ; k++)
	for(i = 1 ; i <= n-po(k) +1; i++)
		for(j = 1 ; j <= n - po(k)+1; j++)
			v[i][j][k] = max(v[i][j][k-1],v[i+po(k-1)][j][k-1],v[i][j+po(k-1)][k-1],v[i+po(k-1)][j+po(k-1)][k-1]);
	

}

void citire(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);

int x,y,l,k,sol;
scanf("%d %d",&n,&m);


for(i = 1 ; i<=n;i++)  
	for(j=1;j<=n;j++)
		scanf("%d",&v[i][j][0]);
solve();

for(i = 1; i<=m;i++)
	{scanf("%d %d %d",&x,&y,&l);
	k=1;
	while(po(k)<=l)k++;
	k--;
	sol = max(v[x][y][k],v[x][y+l-po(k)][k],v[x+l-po(k)][y][k],v[x+l-po(k)][y+l-po(k)][k]);
	printf("%d\n",sol);
	
	}
}


int main(){
citire();

return 0;}