Cod sursa(job #150437)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 6 martie 2008 22:39:09
Problema Plantatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#include <math.h>

long n, m, i2, j2, p, e, a[512][512][512], qi, qj, ql, qk, k, marime[512], y;

long max(long nr1, long nr2) {
	if (nr1 > nr2) {
		return nr1;
	}
	return nr2;
}

int main() {
	freopen("plantatie.in", "r", stdin);
	freopen("plantatie.out", "w", stdout);
	scanf("%ld %ld\n", &n, &m);
	for (i2 = 1; i2 <= n; ++i2) {
		for (j2 = 1; j2 <= n; ++j2) {
			scanf("%ld", &a[i2][j2][0]);
		}
	}
	for (i2 = 2; i2 <= 500; ++i2) {
		if (i2 == 1 << (e + 1)) {
			++e;
		}
		marime[i2] = e;
	}
	for (i2 = 1; i2 <= n; ++i2) {
		for (j2 = 1; j2 <= n; ++j2) {
			for(k = 1, y = 1; y * 2 <= n; ++k, y *= 2) {
				a[i2][j2][k] = max(max(max(a[i2][j2][k - 1], a[i2 + y][j2][k - 1]), a[i2 + y][j2 + y][k - 1]), a[i2][j2 + y][k - 1]);
			}
		}
	}
	for (i2 = 1; i2 <= m; ++i2) {
		scanf("%ld %ld %ld\n", &qi, &qj, &ql);
		long qk = marime[ql];
		printf("%ld\n", max(max(max(a[qi][qj][qk], a[qi + ql - (1 << qk)][qj][qk]), a[qi][qj + ql - (1 << qk)][k]), a[qi + ql - (1 << qk)][qj + ql - (1 << qk)][k]));
	}
	return 0;
}