Cod sursa(job #239231)

Utilizator ProtomanAndrei Purice Protoman Data 4 ianuarie 2009 13:43:54
Problema Plantatie Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int n, m, x, y, l;
int lg[1 << 10];
int a[512][11][512];


int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d %d", &n, &m);
	for (int i = 2; i <= n; i++)
		lg[i] = lg[i / 2] + 1;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
			scanf("%ld", &a[i][0][j]);
		for (int lc = 1; lc <= lg[n]; lc++)
		{
			int lg2 = 1 << (lc - 1);
			for (int j = 1; j <= n - lg2 + 1; j++)
				a[i][lc][j] = max(a[i][lc - 1][j], a[i][lc - 1][j + lg2]);
		}
	}
	for (; m; m--)
	{
		scanf("%d %d %d", &x, &y, &l);
		int maxim = 0;
		for (int i = x; i < x + l; i++)
			maxim = max(maxim, max(a[i][lg[l]][y], a[i][lg[l]][y + l - (1 << lg[l])]));
		printf("%d\n", maxim);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}