Cod sursa(job #389166)
#include <fstream>
#define Nmax 510
#define Log2Nmax 10
/*
*
*/
using namespace std;
inline int max( int x, int y, int w, int z )
{
int maxim=x;
if( maxim < y )
maxim=y;
if( maxim < w )
maxim=w;
if( maxim < z )
maxim=z;
return maxim;
}
inline int Log2( int n )
{
int rez=0;
if( n >= 1<<16 )
n>>=16, rez+=16;
if( n >= 1<<8 )
n>>=8, rez+=8;
if( n >= 1<<4 )
n>>=4, rez+=4;
if( n >= 1<<2 )
n>>=2, rez+=2;
if( n >= 1<<1 )
rez+=1;
if( !n )
rez=-1;
return rez;
}
int main()
{int RMQ[Nmax][Nmax][Log2Nmax];
int n, m, i, j, k, c, c2, p, till;
ifstream in("plantatie.in");
in>>n>>m;;
for( i=0; i < n; ++i)
for( j=0; j < n; ++j )
in>>RMQ[i][j][0];
for( k=1; (1<<k) <= n; ++k )
{
c=k-1;
c2=(1<<c);
till=n-(1<<k)+1;
for( i=0; i < till; ++i )
for( j=0; j < till; ++j )
RMQ[i][j][k]=max( RMQ[i][j][c], RMQ[i+c2][j][c], RMQ[i+c2][j+c2][c], RMQ[i][j+c2][c] );
}
ofstream out( "plantatie.out" );
for( ; m; --m )
{
in>>i>>j>>k;
p=Log2( k );
c=(1<<p);
//i-=1; j-=1;
//out<<max( RMQ[i][j][p], RMQ[i+k-c][j][p], RMQ[i+k-c][j+k-c][p], RMQ[i][j+k-c][p] )<<'\n';
}
return 0;
}