Cod sursa(job #614007)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 5 octombrie 2011 13:43:46
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb

#include <cstdio>
#include <fstream>
#include <algorithm>

using namespace std;

#define N 512

int lg[N],rmq[10][N][N],n,q,m[N][N];

ifstream in ("plantatie.in");

void read ()
{
	
	in>>n>>q;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			in>>rmq[0][i][j];

}

void dinam ()
{
	
	for(int i=2;i<=n;++i)
		lg[i]=lg[i>>1]+1;
	++n;
	for(int k=1;(1<<k)<=n;++k){
		int ll=(1<<k),l;
		for(int i=1;i+ll<=n;++i)
			for(int j=1;j+ll<=n;++j){
				l=1<<(k-1);
				rmq[k][i][j]=max(max(rmq[k-1][i][j],rmq[k-1][i+l][j]),max(rmq[k-1][i][j+l],rmq[k-1][i+l][j+l]));
			}
		}
	
}

void solve ()
{
	
	freopen ("plantatie.out","w",stdout);
	for(int i,j,k,l;q;--q){
		in>>i>>j>>k;
		l=lg[k];
		printf("%d\n",max(max(rmq[l][i][j],rmq[l][i+k-(1<<l)][j]),max(rmq[l][i][j+k-(1<<l)],rmq[l][i+k-(1<<l)][j+k-(1<<l)])));
		}
	
	}

int main ()
{
	
	read ();
	dinam ();
	solve ();
	
	return 0;}