Cod sursa(job #591710)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 25 mai 2011 10:29:18
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
# include <fstream>
# define  NM  (1 << (k - 1))
using namespace std;

ifstream f ("plantatie.in");
ofstream g ("plantatie.out");

int n, m, i, j, k, a[510][510][10], vlg[510];

template <class T>
	inline T maxim (T a, T b, T c, T d){
		int mx = a;
		if (mx < b) mx = b;
		if (mx < c) mx = c;
		if (mx < d) mx = d;
		return mx;
	}
int main (){
	f >> n >> m;
	
	for (i = 2; i <= 505; ++i) vlg[i] = vlg[i >> 1] + 1;
	for (i = 1; i <= n; ++i)
		for (j = 1; j <= n; ++j)
			f >> a[i][j][0];
	
	
	for (k = 1; k <= vlg[n]; ++k)
		for (i = 1; i <= n - (1 << k) + 1; ++i)
			for (j = 1; j <= n - (1 << k) + 1; ++j)
				a[i][j][k] = maxim (a[i][j][k - 1], a[i][j + NM][k - 1], a[i + NM][j][k - 1], a[i + NM][j + NM][k - 1]);
	
	for (; m > 0; --m){
		f >> i >> j >> k;
		int p = vlg[k];
		
		g << maxim (a[i][j][p], a[i][j + k - (1 << p)][p], a[i + k - (1 << p)][j][p], a[i + k - (1 << p)][j + k - (1 << p)][p]) << '\n';
	}
	
	g.close ();
	return 0;
}