Pagini recente » Cod sursa (job #2275103) | Cod sursa (job #344066) | Cod sursa (job #2484562) | Cod sursa (job #1046176) | Cod sursa (job #2344056)
#include <bits/stdc++.h>
using namespace std;
ifstream in ( "plantatie.in" ) ;
ofstream out ( "plantatie.out" ) ;
int rmq [ 10 ][ 501 ][ 501 ] , lg [ 502 ] , best ;
int main()
{
int i , n , j , m , k ;
in >> n >> m ;
for ( i = 2 ; i <= n ; ++ i ) lg [ i ] = lg [ i >> 1 ] + 1 ;
for ( i = 1 ; i <= n ; ++ i )
for ( j = 1 ; j <= n ; ++ j )
{
in >> rmq [ 0 ][ i ][ j ] ;
}
for ( k = 1 ; ( 1 << k ) <= n ; ++ k )
for ( i = 1 ; i + ( 1 << k ) <= n + 1 ; ++ i )
for ( j = 1 ; j + ( 1 << k ) <= n + 1 ; ++ j )
{
rmq [ k ][ i ][ j ] = rmq [ k - 1 ][ i ][ j ] ;
rmq [ k ][ i ][ j ] = max ( rmq [ k ][ i ][ j ] , rmq [ k - 1 ][ i + ( 1 << ( k - 1 ) ) ][ j ] ) ;
rmq [ k ][ i ][ j ] = max ( rmq [ k ][ i ][ j ] , rmq [ k - 1 ][ i ][ j + ( 1 << ( k - 1 ) ) ] ) ;
rmq [ k ][ i ][ j ] = max ( rmq [ k ][ i ][ j ] , rmq [ k - 1 ][ i + ( 1 << ( k - 1 ) ) ][ j + ( 1 << ( k - 1 ) ) ] ) ;
}
while ( m -- )
{
int x , y , z ;
in >> x >> y >> z ;
best = rmq [ lg [ z ] ][ x ][ y ] ;
best = max ( best , rmq [ lg [ z ] ][ x ][ y + z - ( 1 << lg [ z ] ) ] ) ;
best = max ( best , rmq [ lg [ z ] ][ x + z - ( 1 << lg [ z ] ) ][ y ] ) ;
best = max ( best , rmq [ lg [ z ] ][ x + z - ( 1 << lg [ z ] ) ][ y + z - ( 1 << lg [ z ] ) ] ) ;
out << best << '\n' ;
}
return 0;
}