Pagini recente » Cod sursa (job #9207) | Cod sursa (job #3209118) | Cod sursa (job #283308) | Cod sursa (job #285236) | Cod sursa (job #18308)
Cod sursa(job #18308)
#include <stdio.h>
#define d (1<<(k-1))
int A[11][501][501],n,t;
void ReadData ()
{
int i,j;
freopen ( "plantatie.in" , "r" , stdin );
scanf ( "%d %d" , &n , &t );
for ( i=0 ; i<n ; i++ )
for (j=0; j<n ; j++ )
scanf ( "%d" , &A[0][i][j] );
}
int max ( int a1 , int a2 , int a3 , int a4)
{
int x,y;
x= (a1<a2)?(a2):(a1);
y= (a3<a4)?(a4):(a3);
return (x>y) ? (x) : (y);
}
void PreprocessData ()
{
int i,j,k;
for ( k=1 ; 1<<k<=n ; k++ )
for ( i=0 ; i<n-(d<<1)+1 ; i++ )
for ( j=0 ; j<n-(d<<1)+1; j++ )
A[k][i][j]=max ( A[k-1][i][j] , A[k-1][i+d][j] , A[k-1][i][j+d] , A[k-1][i+d][j+d] );
}
int Answer ( int x , int y , int l )
{
int k;
for ( k=0 ; 1<<(k+1) <= l ; k++ );
return
max ( A[k][x][y] , A[k][x+l-(d<<1)][y] , A[k][x][y+l-(d<<1)] , A[k][x+l-(d<<1)][y+l-(d<<1)] );
}
void AnswerQuestions ()
{
int i,q,x,y,l;
freopen ( "plantatie.out" , "w" , stdout );
for ( i=0 ; i<t ; i++ ) {
scanf ( "%d %d %d" , &x , &y , &l );
q = Answer ( x-1 , y-1 , l );
printf ( "%d\n" , q );
}
fclose ( stdin );
fclose (stdout );
}
int main ()
{
ReadData ();
PreprocessData ();
AnswerQuestions ();
//say goodbye :D
return 0;
}