Cod sursa(job #3299031)

Utilizator CosminaneBoac Mihai Cosmin Cosminane Data 3 iunie 2025 22:46:24
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <iostream>
using namespace std;
int rmq[505][505][10], logar[505];
int main(){
	int n, m, i, j, k, x, y, p;
	ifstream fin( "plantatie.in" );
	ofstream fout( "plantatie.out" );
	//cout << "AJUNS\n";
	//n = m = 1;
	//cin >> n >> m;
	fin >> n >> m;
	//cout << n << ' ' << m << '\n';
	for( i = 0; i < n; i++ ){
		for( j = 0; j < n; j++ ){
			fin >> rmq[i][j][0];
		}
	}
	logar[0] = logar[1] = 0;
	for( i = 2; i <= n; i++ ){
		logar[i] = logar[i / 2] + 1;
	}
	for( k = 1; ( 1 << k ) <= n; k++ ){
		for( i = 0; i + ( 1 << k ) - 1 < n; i++ ){
			for( j = 0; j + ( 1 << k ) - 1 < n; j++ ){
				rmq[i][j][k] = max( max( rmq[i][j][k - 1], rmq[i][j + ( 1 << ( k - 1 ) )][k - 1] ),
									max( rmq[i + ( 1 << ( k - 1 ) )][j][k - 1],
									     rmq[i + ( 1 << ( k - 1 ) )][j + ( 1 << ( k - 1 ) )][k - 1] ) );
				//cout << i << ' ' << j << ' ' << k << ' ' << rmq[i][j][k] << '\n';
			}
		}
	}
	for( i = 0; i < m; i++ ){
		fin >> x >> y >> p;
		//cout << i << ' ' << x << ' ' << y << ' ' << p << '\n';
		x--;
		y--;
		k = logar[p];
		//cout << i << ' ' << x << ' ' << y << ' ' << p << '\n';
		fout << max( max( rmq[x][y][k], rmq[x][y + p - ( 1 << k )][k] ),
					 max( rmq[x + p - ( 1 << k )][y][k],
						  rmq[x + p - ( 1 << k )][y + p - ( 1 << k )][k] ) ) << '\n';
	}
	return 0;
}