Cod sursa(job #1245331)

Utilizator tudi98Cozma Tudor tudi98 Data 18 octombrie 2014 22:50:42
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
using namespace std;
#define dim 505

int RMQ[dim][dim][10];

inline int max(int a,int b){
	return a < b ? b : a;
}

int main(){

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

	int n,m;
	fin >> n >> m;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
		 	fin >> RMQ[i][j][0];
		}
	}                      

	for(int k = 1; (1 << k) <= n; k++){
	 	for(int i = 1; i + (1 << k) - 1 <= n; i++){
	 		for(int j = 1; j + (1 << k) - 1 <= n; j++){
	 			int p = 1 << (k - 1);
	 			RMQ[i][j][k] = max(max(RMQ[i][j][k-1],RMQ[i][j+p][k-1]),max(RMQ[i+p][j][k-1],RMQ[i+p][j+p][k-1]));	 			
	 		}
	 	}
	}

	while(m--){
		int x,x0,y0,y,l,Ans,k;
		fin >> x >> y >> l;
		x0 = x + l - 1;
		y0 = y + l - 1;
		for(k = 0; (1 << k) <= l; k++);
		k--;
		Ans = max(max(RMQ[x][y0-(1<<k)+1][k],RMQ[x][y][k]),max(RMQ[x0-(1<<k)+1][y0-(1<<k)+1][k],RMQ[x0-(1<<k)+1][y][k]));
		fout << Ans << "\n";
	}
                            
}