Cod sursa(job #904912)

Utilizator iulishorIulian Popescu iulishor Data 4 martie 2013 23:33:11
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
# include <fstream>
# include <cmath>
# define lg2 0.30102999
# define dim 505
using namespace std;
long mat[ dim ][ dim ][ 10 ], a[ dim ][ dim ];
int n,m;
inline void initializare()
{
	for(int i=0; i<n; ++i )
		for(int j=0; j<n; ++j )
			mat[ i ][ j ][ 0 ] = a[ i ][ j ];
	for(int k=1; 1<<k <=n; ++k )
		for(int i=0; i+(1<<k)-1 <n; ++i )
			for(int j=0; j+(1<<k)-1 <n; ++j )
				mat[ i ][ j ][ k ] = max( mat[ i ][ j ][ k-1 ], max( mat[ i ][ j+(1<<(k-1)) ][k-1], max( mat[ i+(1<<(k-1)) ][ j ][ k-1 ], mat[ i+(1<<(k-1)) ][j+(1<<(k-1))][k-1])));
}
inline void citire()
{
	ifstream fin("plantatie.in");
	ofstream fout("plantatie.out");
	fin >> n >> m;
	for(int i=0; i<n; ++i )
		for(int j=0; j<n; ++j )
			fin >> a[ i ][ j ];
	initializare();
	for(; m; --m )
	{
		int i, j; float k;
		fin >> i >> j >> k;
		--i; --j; 
		int p = log10( k ) / lg2;
		fout << max( mat[ i ][ j ][ p ], max( mat[ i ][ j+int(k)-(1<<p) ][p], max( mat[ i+ int (k)-(1<<p) ][ j ][ p ], mat[ i+int (k)-(1<<p) ][ j+int(k)-(1<<p) ][p])));
		fout<<"\n";
	}
}
int main()
{
	citire();
}