Cod sursa(job #2066149)

Utilizator flibiaVisanu Cristian flibia Data 14 noiembrie 2017 18:43:42
Problema Plantatie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

int n, m, k, x, y, rmq[12][1 << 12][1 << 12];

void build(){
	int sz = log(n) + 1, p;
	for(int k = 1; k <= sz; k++)
		for(int i = 1; i <= n; i++)
			for(int j = 1; j <= n; j++){
				p = (1 << (k - 1));
				rmq[k][i][j] = max({rmq[k-1][i][j], rmq[k-1][i][j+p], rmq[k-1][i+p][j], rmq[k-1][i+p][j+p]});
			}
}

int solve(){
	int sz = log2(k);
	int p = k - (1 << sz);
	return max({rmq[sz][x][y], rmq[sz][x+p][y], rmq[sz][x][y+p], rmq[sz][x+p][y+p]});
}

int main(){
	ifstream in("plantatie.in");
	ofstream out("plantatie.out");
	in >> n >> m;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= n; j++)
			in >> rmq[0][i][j];
	build();
	for(int i = 1; i <= m; i++){
		in >> x >> y >> k;
		out << solve() << '\n';
	}
	return 0;
}