Cod sursa(job #3186497)

Utilizator CzarPopescu Cezar Stefan Cristian Czar Data 23 decembrie 2023 14:58:33
Problema Plantatie Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <vector>
#include <climits>
#include<unordered_map>
#include <algorithm>
#include <set>
#include<string>
#include<fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int t;
#define ll long long

int r[10][550][550];
int E[550];
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int N, M;
	in >> N >> M;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			in >> r[0][i][j];
		}
	}

	for (int p = 1; (1 << p) <= N; p++) {
		for (int i1 = 1; i1 + (1 << p) - 1 <= N; i1++) {
			for (int j1 = 1; j1 + (1 << p) - 1 <= N; j1++) {
				int i2 = i1 + (1 << (p - 1));
				int j2 = j1 + (1 << (p - 1));
				r[p][i1][j1] = max(
					max(r[p-1][i1][j1], r[p-1][i1][j2]),
					max(r[p-1][i2][j1], r[p-1][i2][j2])
				);
			}
		}
	}

	for (int i = 2; i < 10; i++) {
		E[i] = 1 + E[i / 2];
	}

	while (M--) {
		int qi, qj, len;
		in >> qi >> qj >> len;
		int p = E[len];
		int i2, j2;
		i2 = qi + len - (1 << p);
		j2 = qj + len - (1 << p);
		int ans = max(
			max(r[p][qi][qj], r[p][qi][j2]),
			max(r[p][i2][qj], r[p][i2][j2])
		);
		out << ans << "\n";
	}
}