Pagini recente » Cod sursa (job #1769143) | Cod sursa (job #2949248) | Cod sursa (job #89249) | Cod sursa (job #2187587) | Cod sursa (job #2849342)
#include <stdio.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
static inline int max2( const int& a, const int& b ) {
return ( a >= b ? a : b );
}
static inline int max( const int& a, const int& b, const int& c, const int& d ) {
return max2( max2( a, d ), max2( b, c ) );
}
#define MAX 500
int rmq[ 11 ][ MAX + 1 ][ MAX + 1 ];
int logdoi[ MAX + 1 ];
int n, q;
int main()
{
FILE *fin = fopen( "plantatie.in", "r" );
fscanf( fin, "%d %d", &n, &q );
for( int i = 1; i <= n; i++ )
for( int c = 1; c <= n; c++ )
fscanf( fin, "%d", &rmq[ 0 ][ i ][ c ] );
{
logdoi[ 1 ] = 0;
for( int i = 2; i <= n; i++ )
logdoi[ i ] = logdoi[ i >> 1 ] + 1;
for( int i = 1; ( 1 << i ) <= n; i++ ) {
int k = ( 1 << ( i - 1 ) );
for( int l = 1; l + k <= n; l++ )
for( int c = 1; c + k <= n; c++ )
rmq[ i ][ l ][ c ] = max( rmq[ i - 1 ][ l ][ c ], rmq[ i - 1 ][ l + k ][ c ], rmq[ i - 1 ][ l ][ c + k ], rmq[ i - 1 ][ l + k ][ c + k ] );
}
}
int lin, col, L;
FILE *fout = fopen( "plantatie.out", "w" );
while( q-- ) {
fscanf( fin, "%d %d %d", &lin, &col, &L );
int k = logdoi[ L ];
int K = ( 1 << k );
int maxx = max( rmq[ k ][ lin ][ col ], rmq[ k ][ lin + L - K ][ col ], rmq[ k ][ lin ][ col + L - K ], rmq[ k ][ lin + L - K ][ col + L - K ] );
fprintf( fout, "%d\n", maxx );
}
fclose( fin );
fclose( fout );
return 0;
}