Cod sursa(job #2858321)

Utilizator alextmAlexandru Toma alextm Data 27 februarie 2022 12:57:09
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;
 
const int LMAX = 10;
const int NMAX = 501;
 
int rmq[NMAX][NMAX][LMAX], lg[NMAX];
 
int main() {
	ifstream cin("plantatie.in");
	ofstream cout("plantatie.out");
	
	int N, M, l;
	cin >> N >> M;
	for(int i = 1; i <= N; i++)
		for(int j = 1; j <= N; j++)
			cin >> rmq[i][j][0];
			
	lg[1] = 0;
	for(int i = 2; i <= N; i++)
		lg[i] = lg[i / 2] + 1;
			
	for(int k = 1; (1 << k) <= N; k ++) {
		l = (1 << k);
		for(int i = 1; i <= N - l + 1; i ++)
			for(int j = 1; j <= N - l + 1; j ++)
				rmq[i][j][k] = max(max (rmq[i][j][k - 1], rmq[i][j + (l >> 1)][k - 1]), max (rmq[i + (l >> 1)][j][k - 1], rmq[i + (l >> 1)][j + (l >> 1)][k - 1]));
	}
	
	while(M--) {
		int x, y, k;
		cin >> x >> y >> k;
		int p = (1 << lg[k]);
		cout << max(rmq[x][y][lg[k]], max(rmq[x + k - p][y][lg[k]], max(rmq[x][y + k - p][lg[k]], rmq[x + k - p][y + k - p][lg[k]]))) << '\n';
	}
	
	return 0;
}