Cod sursa(job #622492)

Utilizator loginLogin Iustin Anca login Data 18 octombrie 2011 00:58:25
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
# include <fstream>
# include <iostream>
# define DIM 503
# define max(a,b) (a>b?a:b)
using namespace std;
int n, m, a[10][DIM][DIM];
ifstream fin ("plantatie.in");

void read ()
{
	fin>>n>>m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			fin>>a[0][i][j];
}

void comp ()
{
	for(int k=1;(1<<k)<=n;++k)
		for(int i=1;i+(1<<k)-1<=n;++i)
			for(int j=1;j+(1<<k)-1<=n;++j)
				a[k][i][j]=max(max(a[k-1][i][j],a[k-1][i+(1<<(k-1))][j+(1<<(k-1))]), max(a[k-1][i][j+(1<<(k-1))],a[k-1][i+(1<<(k-1))][j]));
}

int query (int i, int j, int k)
{
	int K=10;
	while ((1<<K)>k)--K;
	return max(max(a[K][i][j], a[K][i+k-(1<<K)][j+k-(1<<K)]), max(a[K][i][j+k-(1<<K)],a[K][i+k-(1<<K)][j]));
}
	
int main ()
{
	read ();
	comp ();
	freopen("plantatie.out", "w", stdout);
	for(int i, j, k;m--;)
	{
		fin>>i>>j>>k;
		printf("%d\n", query(i,j,k));
	}
	return 0;
}