Cod sursa(job #3240575)

Utilizator EricDimiericdc EricDimi Data 17 august 2024 14:54:00
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

std::ifstream f("plantatie.in");
std::ofstream g("plantatie.out");

const int NMAX = 500, LOGMAX = 10;
int r[LOGMAX + 1][NMAX + 1][NMAX + 1];
int log2[NMAX + 1];
int n, m, i1, i2, j1, j2, lat;

int main()
{
	f >> n >> m;

	for (int i = 2; i <= n; i++)
		log2[i] = log2[i >> 1] + 1;

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			f >> r[0][i][j];

	for (int p = 1, lat = 2; lat <= n; p++, lat *= 2)
		for (int i1 = 1; i1 <= n - lat + 1; i1++)
			for (int j1 = 1; j1 <= n - lat + 1; j1++)
			{
				i2 = i1 + (lat >> 1); /// i1 + (1 << (p - 1))
				j2 = j1 + (lat >> 1); /// j1 + (1 << (p - 1))
				r[p][i1][j1] = std::max(std::max(r[p - 1][i1][j1], r[p - 1][i2][j1]),
										std::max(r[p - 1][i1][j2], r[p - 1][i2][j2]));
			}

	while (m--)
	{
		f >> i1 >> j1 >> lat;
		i2 = i1 + lat - (1 << (log2[lat]));
		j2 = j1 + lat - (1 << (log2[lat]));
		g << std::max(std::max(r[log2[lat]][i1][j1], r[log2[lat]][i2][j1]),
					  std::max(r[log2[lat]][i1][j2], r[log2[lat]][i2][j2])) << '\n';
	}
	f.close();
	g.close();
    return 0;
}