Cod sursa(job #2954273)

Utilizator buruiana_stefanburuiana stefan buruiana_stefan Data 13 decembrie 2022 18:57:18
Problema Plantatie Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#include <cmath>
#define int long long

using namespace std;

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

int n,q;
int x, y, k;
vector<vector<int>> a;

struct rmq {
	vector<vector<int>> rmq;
	void setsize(int n) {
		rmq.resize(log2(n) + 3);
		for (int i = 0; i < rmq.size(); i++) rmq[i].resize(n);
	}
	int query(int x,int y){
		int l = log2(y - x + 1);
		return max(rmq[l][x], rmq[l][y - (1 << l) + 1]);
		//return 0;
	}
	void compute(vector <int> v) {
		setsize((int)v.size());
		for (int i = 1; i < v.size(); i++) rmq[0][i] = v[i];
		for (int i = 1; i <= log2(v.size()); i++) {
			for (int j = 0; j < v.size() - (1 << i) + 1; j++) {
				rmq[i][j] = max(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
			}
		}
	}
}r[500];



signed main() {
	cin >> n>> q;
	a.resize(n);
	for (int i = 0; i < n; i++) {
		a[i].resize(n);
		for (int j = 0; j < n; j++) {
			cin >> a[i][j];
		}
		r[i].compute(a[i]);
	}


	while (q--) {
		cin >> x >> y >> k;
		x--;
		y--;
		int ans = 0;
		for (int i = x; i < x + k; i++) {
			ans = max(ans, r[i].query(y, y + k - 1));
		}
		cout << ans << '\n';
	}
}