Cod sursa(job #1606527)

Utilizator valentin50517Vozian Valentin valentin50517 Data 20 februarie 2016 12:35:51
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");


int R[505][505][9],N,M;
int logs(int a){
	return trunc(log2(a));
}

int querry(int i,int j,int k){
	int l = logs(k);
	return max(R[i][j][l],max(R[i][j+k-(1<<l)][l],max(R[i+k-(1<<l)][j][l],R[i+k-(1<<l)][j+k-(1<<l)][l])));
}

int main(){
	fin >> N >> M;
	for(int i = 1;i<=N;i++)
		for(int j = 1;j<=N;j++)
			fin >> R[i][j][0];
			
	for(int l = 1;l<=9;l++)
		for(int i = 1;i<=N-(1<<l)+1;i++)
			for(int j = 1;j<=N-(1<<l)+1;j++){
				R[i][j][l] = max(R[i][j][l-1],max(R[i][j+(1<<(l-1))][l-1],max(R[i+(1<<(l-1))][j][l-1],R[i+(1<<(l-1))][j+(1<<(l-1))][l-1])));
			}
			
	for(int i = 1,x,y,k;i<=M;i++){
		fin >> x >> y >> k; 
		fout << querry(x,y,k) << '\n';	
	}		
	return 0;
}