Pagini recente » Cod sursa (job #1974735) | Cod sursa (job #2240625) | Cod sursa (job #1686600) | Cod sursa (job #1961713) | Cod sursa (job #2300145)
#include <fstream>
using namespace std;
ifstream fin( "plantatie.in" );
ofstream fout( "plantatie.out" );
const int NMAX = 505;
const int K = 6;
int N, nr_q;
long long mat[K][NMAX][NMAX];
int lg[NMAX];
void Pre()
{
for( int i = 2; i <= NMAX; ++i )
lg[i] = lg[i / 2] + 1;
long long aux;
for( int I = 1; I <= K; ++I )
for( int i = 1; i + ( 1 << I ) - 2 <= N; ++i )
for( int j = 1; j + ( 1 << I ) - 2 <= N; ++j )
{
aux = 1 << ( I - 1 );
mat[I][i][j] = max( max( mat[I - 1][i][j], mat[I - 1][i][j + aux] ), max( mat[I - 1][i + aux][j], mat[I - 1][i + aux][j + aux] ) );
}
/*for( int I = 0; I <= 4; ++I )
{
for( int i = 1; i <= N; ++i )
{
for( int j = 1; j <= N; ++j )
fout << mat[I][i][j] << ' ';
fout << '\n';
}
fout << "\n\n";
}*/
}
void Do()
{
int L, C, k;
int lg_k;
int pow_k;
for( int i = 1; i <= nr_q; ++i )
{
fin >> L >> C >> k;
lg_k = lg[k];
pow_k = ( 1 << lg_k );
fout << max( max( mat[lg_k][L][C], mat[lg_k][L][C + k - pow_k] ), max( mat[lg_k][L + k - pow_k][C], mat[lg_k][L + k - pow_k][C + k - pow_k]) ) << '\n';
}
fout.close();
}
void Read()
{
fin >> N >> nr_q;
for( int i = 1; i <= N; ++i )
for( int j = 1; j <= N; ++j )
fin >> mat[0][i][j];
Pre();
}
int main()
{
Read();
// Do();
return 0;
}