Cod sursa(job #430299)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 30 martie 2010 21:35:30
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
#define nmax 510

int v[10][nmax][nmax], lg[nmax], n, m;

inline int max(int a, int b)
{
	if (a<b) a=b;
	return a;
}

int main()
{
	freopen("plantatie.in","r",stdin);
	freopen("plantatie.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i, j, k, c, r;
	for (i=1; i<=n; i++)
		for (j=1; j<=n; j++) scanf("%d",&v[0][i][j]);
	for (i=2; i<=n; i++) lg[i]=lg[i/2]+1;
	for (k=1; k<=lg[n]; k++)
		for (i=1; i<=n-(1<<k)+1; i++)
			for (j=1; j<=n-(1<<k)+1; j++)
				v[k][i][j]=max(max(v[k-1][i][j],v[k-1][i+(1<<(k-1))][j]),max(v[k-1][i][j+(1<<(k-1))], 
					v[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
	while (m--)
	{
		scanf("%d %d %d",&i,&j,&k);
		c=lg[k];
		r=max(max(v[c][i][j], v[c][i][j+k-(1<<c)]), max(v[c][i+k-(1<<c)][j], v[c][i+k-(1<<c)][j+k-(1<<c)]));
		printf("%d\n",r);
	}
}