Cod sursa(job #1761065)

Utilizator ArkinyStoica Alex Arkiny Data 21 septembrie 2016 19:06:42
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<algorithm>
using namespace std;

int RMQ[20][500][500],p[510],N,Q;


ifstream in("plantatie.in");
ofstream out("plantatie.out");

int main()
{

	in >> N >> Q;

	for (int i = 2;i <= 500;++i)
		p[i] = p[i / 2] + 1;

	for (int i = 1;i <= N;++i)
		for (int j = 1;j <= N;++j)
			in>>RMQ[0][i][j];

	for (int i = 1;(1 << i) <= N;++i)
		for (int j = 1;j + ((1 << i) - 1) <= N;++j)
			for (int k = 1;k + ((1 << i) - 1) <= N;++k)
				RMQ[i][j][k] = max(max(RMQ[i - 1][j][k], RMQ[i - 1][j][k + (1 << (i - 1))]), max(RMQ[i - 1][j + (1 << (i - 1))][k], RMQ[i - 1][j + (1 << (i - 1))][k + (1 << (i - 1))]));

	for (int i = 1;i <= Q;++i)
	{
		int a, b, c;

		in >> a >> b >> c;

		out << max(max(RMQ[p[c]][a][b], RMQ[p[c]][a][b + c - (1 << p[c])]), max(RMQ[p[c]][a + c - (1 << p[c])][b], RMQ[p[c]][a + c - (1 << p[c])][b + c - (1 << p[c])])) << '\n';


	}

	return 0;
}