Pagini recente » Cod sursa (job #1473504) | Cod sursa (job #2464858) | Cod sursa (job #1628731) | Cod sursa (job #2840072) | Cod sursa (job #2849341)
#include <stdio.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
/*
metoda de pe codeforces O( N^2 * logN^2 )
incerc cv mai bun =)))))))))))))) O( N^2*logN )
for( int i = 0; i < n; i++ ) {
for( int c = 0; c < m; c++ )
rmq[ 0 ][ i ][ 0 ][ c ] = a[ i ][ j ];
for( int left = 1; ( 1 << left ) <= m; left++ ) {
int k = ( 1 << ( left - 1 ) );
for( int right = 0; right + k < m; right++ )
rmq[ 0 ][ i ][ left ][ right ] = min( rmq[ 0 ][ i ][ left - 1 ][ right ], rmq[ 0 ][ i ][ left - 1 ][ right + k ] );
}
}
for( int left_lin = 1; ( 1 << left_lin ) <= n; left_lin++ )
for( int right_lin = 0; right_lin < n; right_lin++ )
for( int left_col = 0; ( 1 << left_col ) <= m; left_col++ )
for( int right_col = 0; right_col < m; right_col++ )
rmq[ left_lin ][ right_lin ][ left_col ][ right_col ] = min( rmq[ left_lin - 1 ][ right_lin ][ left_col ][ right_col ], rmq[ left_lin - 1 ][ right_lin + k ][ left_col ][ right_col ] );
*/
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;
}