Pagini recente » Cod sursa (job #1861568) | Cod sursa (job #3195946) | Cod sursa (job #2238343) | Cod sursa (job #1951454) | Cod sursa (job #1977906)
#include <stdio.h>
#include <stdlib.h>
int v[501][501];
int r[501][501][9];
int log[501];
int max( int a, int b ) {
return a > b ? a : b;
}
int min( int a, int b ) {
return a < b ? a : b;
}
int query( int a, int b, int x ) {
int l = log[x];
int i1 = a, j1 = b, i2 = a + x - 1, j2 = b + x - 1;
return max( max( r[i2][j2][l], r[i2][j1 + ( 1 << l ) - 1][l] ), max( r[i1 + ( 1 << l ) - 1][j2][l], r[i1 + ( 1 << l ) - 1][j1 + ( 1 << l ) - 1][l] ) );
}
int main() {
FILE *fin, *fout;
int n, m, i, j, a, b, x, k;
fin = fopen( "plantatie.in", "r" );
fout = fopen( "plantatie.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= n; j++ )
fscanf( fin, "%d", &v[i][j] );
for ( i = 1; i <= n; i++ ) {
for ( j = 1; j <= n; j++ ) {
r[i][j][0] = v[i][j];
for ( k = 1; ( 1 << k ) <= min( i, j ); k++ ) {
r[i][j][k] = max( max( r[i][j][k - 1], r[i - ( 1 << ( k - 1 ) )][j - 1][k - 1] ), max( r[i][j - ( 1 << ( k - 1 ) )][k - 1], r[i - ( 1 << ( k - 1 ) )][j - ( 1 << ( k - 1 ) )][k - 1] ) );
}
}
}
log[1] = 0;
for ( i = 2; i <= n; i++ ) {
log[i] = 1 + log[i / 2];
}
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d%d", &a, &b, &x );
fprintf( fout, "%d\n", query( a, b, x ) );
}
fclose( fin );
fclose( fout );
return 0;
}