Cod sursa(job #2593379)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 3 aprilie 2020 18:48:23
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
//
//  main.cpp
//  plantatie
//
//  Created by Euebiu Rares on 03/04/2020.
//  Copyright © 2020 Eusebiu Rares. All rights reserved.
//

#include <iostream>
#include "fstream"
#include "algorithm"
 
std::fstream in("plantatie.in", std::ios::in) ;
std::fstream out("plantatie.out", std::ios::out) ;

int rmq[10][501][501] ;
int LG[501] ;
 
int main() {
	int n, m ;
	in >> n >> m ;
	LG[1] = 0 ;
	for (int i = 2 ; i <= n ; i++) {
		LG[i] = 1 + LG[i / 2] ;
	}
	for (int i = 1 ; i <= n ; i++) {
		for (int j = 1 ; j <= n ; j++) {
			in >> rmq[0][i][j] ;
		}
	}
	int log = LG[n] ;
	for (int i = 1 ; i <= log ; i++) {
		int half = (1 << (i - 1)) ;
			for (int j = (1 << i) ; j <= n ; j++) {
				for (int k = (1 << i) ; k <= n ; k++) {
				rmq[i][j][k] = std::max({rmq[i - 1][j][k], rmq[i - 1][j][k - half], rmq[i - 1][j - half][k], rmq[i - 1][j - half][k - half]}) ;
			}
		}
	}
	for ( ; m > 0 ; m--) {
		int a, b, latura ;
		in >> a >> b >> latura ;
		a += latura - 1 ;
		b += latura - 1 ;
		int l = LG[latura] ;
		int power = 1 << l ;
		out << std::max({rmq[l][a][b], rmq[l][a][b - latura + power], rmq[l][a - latura + power][b], rmq[l][a - latura + power][b - latura + power]}) << '\n' ;
	}
}