Pagini recente » Cod sursa (job #1151961) | Cod sursa (job #2974021) | Cod sursa (job #43017) | Cod sursa (job #350695) | Cod sursa (job #2356214)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin( "plantatie.in" );
ofstream fout( "plantatie.out" );
const int NMAX = 505;
int N, nr_q;
int rmq[12][NMAX][NMAX];
int lg[NMAX];
void Read()
{
fin >> N >> nr_q;
for( int i = 1; i <= N; ++i )
for( int j = 1; j <= N; ++j )
fin >> rmq[0][i][j];
}
void Do()
{
int aux;
for( int I = 1; ( 1 << I ) <= N; ++I )
{
for( int i = 1; i + ( 1 << I ) - 1 <= N; ++i )
for( int j = 1; j + ( 1 << I ) - 1 <= N; ++j )
{
rmq[I][i][j] = rmq[I - 1][i][j];
aux = 1 << ( I - 1 );
rmq[I][i][j] = max( rmq[I][i][j], rmq[I - 1][i + aux][j] );
rmq[I][i][j] = max( rmq[I][i][j], rmq[I - 1][i][j + aux] );
rmq[I][i][j] = max( rmq[I][i][j], rmq[I - 1][i + aux][j + aux] );
}
}
for( int i = 2; i <= 500; ++i )
lg[i] = lg[i / 2] + 1;
int x, y, k;
int logg, ans, aux2;
for( int i = 1; i <= nr_q; ++i )
{
fin >> x >> y >> k;
logg = lg[k];
aux = x + k - 1;
aux2 = y + k - 1;
ans = rmq[logg][x][y];
ans = max( rmq[logg][x][y], rmq[logg][x][aux2 - ( 1 << logg ) + 1] );
ans = max( rmq[logg][x][y], rmq[logg][aux - ( 1 << logg ) + 1][y] );
ans = max( rmq[logg][x][y], rmq[logg][aux - ( 1 << logg ) + 1][aux2 - ( 1 << logg ) + 1] );
fout << ans << '\n';
}
}
int main()
{
Read();
Do();
return 0;
}