Cod sursa(job #929137)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 26 martie 2013 21:13:19
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("plantatie.in"); ofstream fout("plantatie.out");
int M[502][502][10];

int Max4(int a, int b, int c, int d)
{
	return max(a, max(b, max(c, d)));
}


int main()
{

	int n, m, i, j, k;

	fin >> n >> m;
	for(i = 1; i <= n; ++i)
	 for(j = 1; j <= n; ++j)
		fin >> M[i][j][0];

	for (k = 1; (1<<k) <= n; ++k)
	 for (i = 1; (1<<k) + i <= n + 1; ++i)
	  for (j = 1; (1<<k) + j <= n + 1; ++j)
		M[i][j][k] = Max4(M[i][j][k - 1],
                          M[i + (1<<(k - 1))][j][k - 1],
                          M[i][j + (1<<(k - 1))][k - 1],
                          M[i + (1<<(k - 1))][j + (1<<(k - 1))][k - 1]);

	while (m--)
	{
	    int p;
		fin >> i >> j >> k;
		p = 0;

		while ((1<<p) <= k) p++;
		p--;
		fout << Max4(M[i][j][p],
                     M[i + k - (1<<p)][j][p],
                     M[i][j + k - (1<<p)][p],
                     M[i + k - (1<<p)][j + k - (1<<p)][p]) << "\n";
	}

	fin.close(); fout.close();
	return 0;
}