Cod sursa(job #2635744)

Utilizator dream3rDavid Pop dream3r Data 15 iulie 2020 14:29:27
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
//#include "pch.h"
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
ifstream f("plantatie.in");
ofstream o("plantatie.out");
int n, m;
int v[50][507][507];
int x, y, len;
int lg[505];
int k;
void rmq()
{
	for (size_t i = 2; i <= 505; i++)
	{
		lg[i] = lg[i / 2] + 1;
	}

	for (size_t i = 1; i <= n; i++)
	{
		for (size_t j = 1; j <= n; j++)
		{
			f >> k;
			v[0][i][j] = k;
		}
	}
	
	for (size_t k = 1; (1 << k) <= n; k++)
	{
		for (size_t i = 1; i + (1 << k) <= n + 1; i++)
		{
			for (size_t j = 1; j + (1 << j) <= n + 1; j++)
			{
				v[k][i][j] = max(v[k - 1][i][j], max(v[k - 1][i][j + (1 << (k - 1))], max(v[k - 1][i + (1 << (k - 1))][j], v[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))])));
			}
		}
	}
}


int main()
{
	f >> n >> m;
	rmq();
	while (m--)
	{
		f >> x >> y >> len;
		int cv = lg[len];
		o << max(v[cv][x][y], max(v[cv][x - (1 << cv) + len][y], max(v[cv][x][y - (1 << cv) + len], v[cv][x - (1 << cv) + len][y - (1 << cv) + len]))) << "\n";
	}
}