Cod sursa(job #229650)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 10 decembrie 2008 22:19:45
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>

int N, M, c[10][505][505], t[505];

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

int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);

	int i, j, x, y, k;
	
	scanf("%d %d",&N,&M);
	for (i = 1; i <= N; i++)	
		for (j = 1; j <= N; j++) scanf("%d",&c[0][i][j]);

	t[1] = 0;
	for (i = 2; i <= N; i++) t[i] = t[i / 2] + 1;

	for (k = 1; (1<<k) <= N; k++)
		for (i = 1; i <= N - (1<<k) + 1; i++)
			for (j = 1; j <= N - (1<<k) + 1; j ++)
				c[k][i][j] = max(max(c[k - 1][i][j], c[k - 1][i + (1<<(k - 1))][j + (1<<(k - 1))]), max(c[k - 1][i + (1<<(k - 1))][j], c[k - 1][i][j + (1<<(k - 1))]));

	while (M--)
	{
		scanf("%d %d %d",&x,&y,&k);
		j = t[k];
		printf("%d\n",max(max(c[j][x][y], c[j][x + k - (1<<j)][y + k - (1<<j)]), max(c[j][x + k - (1<<j)][y], c[j][x][y + k - (1<<j)])));
	}
	return 0;
}