Cod sursa(job #2079334)

Utilizator WebDesignbyTMGhiorghiu Ioan-Viorel WebDesignbyTM Data 1 decembrie 2017 00:21:39
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#define DM 501
#define DN 10
#include <fstream>
using namespace std;

ifstream fi ("plantatie.in");
ofstream fo ("plantatie.out");
int rmq[DM][DM][DN], lg[DM], n, m, a, b, c, d, aux1, aux2, aux3, aux4;

int main()
{
	fi >> n >> m;
	for (int i = 2; i < DM; ++i)
		lg[i] = lg[i/2] + 1;
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= n; ++j)
			fi >> rmq[i][j][0];
	for (int i = 1; i <= lg[n]; ++i)
		for (int x = 1; x + (1<<i) - 1 <= n; ++x)
			for (int y = 1; y + (1<<i) - 1 <= n; ++y)
			{
				aux1 = rmq[x][y][i-1];
				aux2 = rmq[x][y+(1<<(i-1))][i-1];
				aux3 = rmq[x+(1<<(i-1))][y][i-1];
				aux4 = rmq[x+(1<<(i-1))][y+(1<<(i-1))][i-1];
				rmq[x][y][i] = max(max(aux1, aux2), max(aux3, aux4));
			}
	for (int i = 1; i <= m; ++i)
	{
		fi >> a >> b >> c;
		d = lg[c];
		aux1 = rmq[a][b][d];
		aux2 = rmq[a][b+c-(1<<d)][d];
		aux3 = rmq[a+c-(1<<d)][b][d];
		aux4 = rmq[a+c-(1<<d)][b+c-(1<<d)][d];
		fo << max(max(aux1, aux2), max(aux3, aux4)) << '\n';
	}
	return 0;
}