Pagini recente » Cod sursa (job #2660920) | Cod sursa (job #1691212) | Cod sursa (job #3127855) | Rating Palagniuc Stefan (palaepazona) | Cod sursa (job #1240226)
#include <stdio.h>
#define MAXN 500
#define MAXLG 9
int rmq[MAXN + 1][MAXN + 1][MAXLG + 1], lg[MAXN + 1];
int max2( int a, int b ){
return a > b ? a : b;
}
int max4( int a, int b, int c, int d ){
return max2( max2( a, b ), max2( c, d ) );
}
int main(){
FILE *in = fopen( "plantatie.in", "r" );
int n, m, i, j, k, x, l, c;
fscanf(in, "%d%d", &n, &m);
for ( i = 1; i <= n; i++ ){
for ( j = 1; j <= n; j++ ){
fscanf( in, "%d", &rmq[i][j][0] );
for ( k = 1; k <= MAXLG; k++){
x = 1 << (k - 1);
l = max2(i - x, 1);
c = max2(j - x, 1);
rmq[i][j][k] = max4( rmq[i][j][k - 1], rmq[l][j][k - 1], rmq[i][c][k - 1], rmq[l][c][k - 1] );
}
k = 1;
}
}
for ( i = 2; i <= MAXN; i++){
lg[i] = lg[i >> 1] + 1;
}
for ( i = 1; i <= MAXLG && 1 << i <= n; i++ ){
lg[1 << i]--;
}
FILE *out = fopen( "plantatie.out", "w" );
int lat, lin, col;
for ( i = 1; i <= m; i++ ){
fscanf( in, "%d%d%d", &lin, &col, &lat );
x = 1 << lg[lat];
l = lin + lat - 1;
c = col + lat - 1;
fprintf( out, "%d\n", max4( rmq[lin + x - 1][col + x - 1][lg[lat]], rmq[l][col + x - 1][lg[lat]],
rmq[lin + x - 1][c][lg[lat]], rmq[l][c][lg[lat]] ) );
}
fclose( in );
fclose( out );
return 0;
}