Pagini recente » Cod sursa (job #627759) | Cod sursa (job #3125225) | Cod sursa (job #381226) | Cod sursa (job #2690101) | Cod sursa (job #3220836)
#include <stdio.h>
#define MAXN 500
#define LOG 9
int rmax[LOG][MAXN + 1][MAXN + 1];
char e[MAXN + 1];
static inline int max(int a, int b){
return a > b ? a : b;
}
static inline int query(int l, int c, int lat){
int p = e[lat];
int l1 = l + lat - (1 << p);
int c1 = c + lat - (1 << p);
return max(max(rmax[p][l][c], rmax[p][l1][c]), max(rmax[p][l][c1], rmax[p][l1][c1]));
}
int main(){
FILE *fin, *fout;
int n, q, l, c, l1, c1, lat, p, i;;
fin = fopen( "plantatie.in", "r" );
fscanf ( fin, "%d%d", &n, &q );
for ( l = 1; l <= n; l++ ){
for ( c = 1; c <= n; c++ )
fscanf( fin, "%d", &rmax[0][l][c] );
}
for( p = 1; (1 << p) <= n; p++ ){
for( l = 1; l + (1 << p) - 1 <= n; l++ ){
for( c = 1; c + (1 << p) - 1 <= n; c++ ){
l1 = l + (1 << (p - 1));
c1 = c + (1 << (p - 1));
rmax[p][l][c] = max(max(rmax[p - 1][l][c], rmax[p - 1][l][c1]), max(rmax[p - 1][l1][c], rmax[p - 1][l1][c1]));
}
}
}
for( i = 2; i <= n; i++ )
e[i] = 1 + e[i / 2];
fout = fopen( "plantatie.out", "w" );
for( i = 0; i < q; i++ ){
fscanf(fin, "%d%d%d", &l, &c, &lat);
p = e[lat];
l1 = l + lat - (1 << p);
c1 = c + lat - (1 << p);
fprintf(fout, "%d\n", query(l, c, lat));
}
fclose( fin );
fclose( fout );
return 0;
}