Cod sursa(job #2151627)

Utilizator DenisacheDenis Ehorovici Denisache Data 4 martie 2018 18:13:10
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <functional>
#include <bitset>
#include <set>

using namespace std;

int RMQ[10][505][505];

int main() {
	ios::sync_with_stdio(false);

	string filename = "plantatie";

	ifstream fin(filename + ".in");
	ofstream fout(filename + ".out");

	int n, m;
	fin >> n >> m;

	vector<int> lg(n + 1);

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

	for (int i = 0; i < n; ++i)
		for (int j = 0; j < n; ++j)
			fin >> RMQ[0][i][j];

	for (int k = 1; k <= lg[n]; ++k) {
		for (int i = 0; i < n - (1 << k) + 1; ++i) {
			for (int j = 0; j < n - (1 << k) + 1; ++j) {
				int l = 1 << (k - 1);
				RMQ[k][i][j] = max({ RMQ[k - 1][i][j], RMQ[k - 1][i + l][j], RMQ[k - 1][i][j + l], RMQ[k - 1][i + l][j + l] });
			}
		}
	}

	while (m--) {
		int x, y, k;
		fin >> x >> y >> k;
		--x; --y;

		int lvl = lg[k];
		int rem = k - (1 << lvl);

		fout << max({ RMQ[lvl][x][y], RMQ[lvl][x + rem][y], RMQ[lvl][x][y + rem], RMQ[lvl][x + rem][y + rem] }) << "\n";
	}

	//system("pause");
	return 0;
}