Cod sursa(job #665194)

Utilizator test9cosmin Macovei test9 Data 21 ianuarie 2012 19:01:29
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#define NMAX  501
#define LMax 10
int lg[LMax], A[LMax][NMAX][NMAX];
inline 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, k, n, m, x, y;
	scanf("%d %d", &n, &m);
	for (i=1; i<=n; ++i)
		for (j=1; j<=n; ++j)
			scanf("%d", &A[0][i][j]);
	lg[1] = 0;
	for (i=2; i<=n; ++i)   lg[i] = lg[i/2] + 1;
	for (j=1; (1<<j) <= n; ++j)
		for (i=1; i + (1<<j) - 1 <= n; ++i)
			for (k=1; k + (1<<j) - 1 <= n; ++k) {
				A[j][i][k] = max (A[j-1][i][k], max(A[j-1][i + (1<<(j-1))][k],
					max(A[j-1][i][k + (1<<(j-1))], A[j-1][i + (1<<(j-1))][k + (1<<(j-1))])));
			}
	for (i=1; i<=m; ++i) {
		scanf("%d %d %d", &x, &y, &k);
		int y1 = k + y;
		int x1 = k + x;
		int SOL = max(A[lg[k]][x][y], max(A[lg[k]][x1 - (1<<lg[k])][y], 
				max(A[lg[k]][x][y1 - (1<<lg[k])], A[lg[k]][x1 - (1<<lg[k])][y1 - (1<<lg[k])])));
		printf("%d\n", SOL);
	}
	return 0;}