Cod sursa(job #631202)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 7 noiembrie 2011 12:40:52
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

using namespace std;

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

const int N=501;

int a[10][N][N],lg[N],n,m;// Vom calcula folosind algoritmul RMQ in 2D maximul din o matrice de latura 2^k pornind din punctul i,j;

void citire(){
	int i,j;
	in>>n>>m;
	for(i=1;i<=n;++i){
		for(j=1;j<=n;++j){
			in>>a[0][i][j];
		}
	}
}

inline int max(int a,int b){
	if(a>b)
		return a;
	return b;
}

void RMQ(){
	int i,j,k,x,y,l,aux;
	lg[1]=0;
	for(i=2;i<=n;i++){
		lg[i]=lg[i/2]+1;
	}
	for(k=1;k<=lg[n];k++){
		for(i=1;i<=n;++i){
			for(j=1;j<=n;++j){
				a[k][i][j]=max(max(a[k-1][i][j],a[k-1][i+(1<<k-1)][j]),max(a[k-1][i][j+(1<<k-1)],a[k-1][i+(1<<k-1)][j+(1<<k-1)]));
			}
		}
	}
	for(i=1;i<=m;i++){
		in>>x>>y>>l;
		aux=lg[l];
		out<<max(max(a[aux][x][y],a[aux][x+l-(1<<aux)][y]),max(a[aux][x][y+l-(1<<aux)],a[aux][x+l-(1<<aux)][y+l-(1<<aux)]))<<"\n";
	}
}
	

int main(){
	citire();
	RMQ();
	return 0;
}