Cod sursa(job #2901910)

Utilizator stefanliciuLiciu Vasile-Stefan stefanliciu Data 14 mai 2022 19:38:01
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
#include <fstream>
#include <cmath>

using namespace std;

#define MAXN 502
#define LOG 9

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

int d[MAXN][MAXN][LOG];
int a[MAXN][MAXN], N, M;

int main()
{
	int i, j, k;
	fin >> N >> M;
	for (i = 1; i <= N; ++i)
		for (j = 1; j <= N; ++j)
		{
			fin >> a[i][j];
			d[i][j][0] = a[i][j];
		}
	//d[i][j][k] = el maxim din submatricea care are colt stanga sus (i,j) si colt dreapta jos (i + 2^k - 1)(j + 2^k - 1)
	for (k = 1; k < LOG; ++k)
		for (i = 1; i + (1 << k) - 1 <= N; ++i)
			for (j = 1; j + (1 << k) - 1 <= N; ++j)
			{
				d[i][j][k] = max({ d[i][j][k - 1], d[i + (1 << k - 1)][j][k - 1], d[i][j + (1 << k - 1)][k - 1], d[i + (1 << k - 1)][j + (1 << k - 1)][k - 1]});
			}

	for (int p = 1; p <= M; ++p)
	{
		fin >> i >> j >> k;
		int l = log2(k);
		int i2 = i + k;
		int j2 = j + k;
		fout << max({ d[i][j][l], d[i2 - (1 << l)][j][l], d[i][j2 - (1 << l)][l], d[i2 - (1 << l)][j2 - (1 << l)][l] }) << '\n';
	}
	return 0;
}