Cod sursa(job #3297075)

Utilizator DalvDalvGhita Vladut DalvDalv Data 20 mai 2025 22:30:11
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bit>
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;

int plantatie[500][500][9];

int main() {
	ifstream cin("plantatie.in");
	ofstream cout("plantatie.out");
	int n, m; cin >> n >> m;
	int log2n = log2(n) + 1;

	for(int i = 0; i < n; i++) {
		for(int j = 0; j < n; j++) {
			cin >> plantatie[i][j][0];
		}
	}

	for(int p = 1; p < log2n; p++) {
		for(int i = 0; i < n + (1 << p - 1); i++) {
			for(int j = 0; j < n + (1 << p - 1); j++) {
				plantatie[i][j][p] = max(
					max(plantatie[i][j][p-1], plantatie[i + (1 << p - 1)][j][p - 1]),
					max(plantatie[i][j + (1 << p - 1)][p - 1], plantatie[i + (1 << p - 1)][j + (1 << p - 1)][p - 1])
				);
			}
		}
	}

	while(m-- > 0) {
		int i, j, l; cin >> i >> j >> l;
		i--;j--;
		int p = log2(l);
		int offs = l - (1 << p);
		int res = max(
			max(plantatie[i][j][p], plantatie[i + offs][j + offs][p]),
			max(plantatie[i + offs][j][p], plantatie[i][j + offs][p])
		);
		cout << res << "\n";
	}

	::cin >> n;
}