Mai intai trebuie sa te autentifici.

Cod sursa(job #2592998)

Utilizator mariaghinescu22Ghinescu Maria mariaghinescu22 Data 2 aprilie 2020 18:06:35
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N = 501;
const int M = 9;
int n, m, x, y, k;
int lg[N], rmq[M][N][N];

int main() {
	in >> n >> m;
	for (int i = 1; i <= n; i++) 
		for (int j = 1; j <= n; j++) 
			in >> rmq[0][i][j];

	lg[1] = 0;
	for (int i = 2; i <= n; i++)
		lg[i] = 1 + lg[i / 2];

	int log = lg[n];
	for (int i = 1; i <= log; i++) {
		int half = (1 << (i - 1));
		for (int j = (1 < i); j <= n; j++) {
			for (int k = (1 << i); k <= n; k++) {
				rmq[i][j][k] = max(max(rmq[i - 1][j][k], rmq[i - 1][j][k - half]), max(rmq[i - 1][j - half][k], rmq[i - 1][j - half][k - half]));
			}
		}
	}

	for (int i = 1; i <= m; i++) {
		in >> x >> y >> k;
		x += k - 1;
		y += k - 1;
		int l = lg[k];
		out << max(max(rmq[l][x][y], rmq[l][x][y - k + (1 << l)]), max(rmq[l][x - k + (1 << l)][y], rmq[l][x - k + (1 << l)][y - k + (1 << l)])) << '\n';
	}
	return 0;
}