Cod sursa(job #677927)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 10 februarie 2012 20:14:53
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#define Nmax 502
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int A[Nmax][Nmax][12],i,j,k,x,y,p[Nmax],n,m,h,sol;
int max(int a,int b){
	if(a>b)
		return a;
	return b;
}
int main (){
	f>>n>>m;
	for( i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			f>>A[i][j][0];
		
	for(i=2;i<=Nmax;i++)
		p[i]=p[i>>1]+1;
	for(k=1;(1<<k)<=n;k++){
		for(i=1;i+(1<<k)-1<=n;i++ ){
			for(j=1;j+(1<<k)-1<=n;j++){
				A[i][j][k]=max(max(max(A[i][j][k-1],A[i+(1<<(k-1))][j][k-1]),A[i+(1<<(k-1))][j+(1<<(k-1))][k-1]),A[i][j+(1<<(k-1))][k-1]);
			}
		}
	}
	int h;
	while ( m-- ) {
		f>>x>>y>>k;
		h=p[k];
		sol=0;
		sol=max(sol,A[x][y][h]); 
		sol=max(sol,A[x+k-(1<<h)][y][h]);
		sol=max(sol,A[x][y+k-(1<<h)][h]);
		sol=max(sol,A[x+k-(1<<h)][y+k-(1<<h)][h]);
		g<<sol<<"\n";
	}

	return 0;
}