Pagini recente » Cod sursa (job #2804891) | Cod sursa (job #609095) | Cod sursa (job #1749164) | Cod sursa (job #2416735) | Cod sursa (job #1245091)
#include<fstream>
using namespace std;
ifstream fin( "plantatie.in" ); ofstream fout( "plantatie.out" );
const int nmax = 500;
const int logmax = 9;
int n, m, pr[ nmax + 1 ];
int d[ nmax + 1 ][ nmax + 1 ][ logmax + 1 ];
inline int max4( int a, int b, int c, int d ) {
int sol = a;
if ( sol < b ) { sol = b; }
if ( sol < c ) { sol = c; }
if ( sol < d ) { sol = d; }
return sol;
}
int memo( int x ) {
if ( pr[ x ] > 0 ) {
return pr[ x ];
} if ( x == 1 ) {
return 0;
} else {
return ( pr[ x ] = memo( x / 2 ) + 1 );
}
}
void read() {
fin >> n >> m;
for( int i = 1; i <= n; ++ i ) {
for( int j = 1; j <= n; ++ j ) {
fin >> d[ i ][ j ][ 0 ];
}
}
}
void solve() {
for( int k = 1, p = 1; (p << 1) <= n; ++ k, p <<= 1 ) {
for( int i = (p << 1); i <= n; ++ i ) {
for( int j = (p << 1); j <= n; ++ j ) {
d[ i ][ j ][ k ] = max4( d[ i ][ j ][ k - 1 ],
d[ i - p ][ j ][ k - 1 ],
d[ i ][ j - p ][ k - 1 ],
d[ i - p ][ j - p ][ k - 1 ] );
}
}
}
}
int main() {
int x, y, k, t, x1, y1;
read();
solve();
for( ; m > 0; -- m ) {
fin >> x >> y >> k;
t = memo( k );
x += k - 1; y += k - 1;
x1 = x - k + (1 << t);
y1 = y - k + (1 << t);
fout << max4( d[ x ][ y ][ t ],d[ x1 ][ y ][ t ],d[ x ][ y1 ][ t ],d[ x1 ][ y1 ][ t ] ) << "\n";
}
fin.close();
fout.close();
return 0;
}