Pagini recente » Istoria paginii runda/leftbehind | Monitorul de evaluare | Cod sursa (job #847749) | Statistici Marica Adrian (mad_adi) | Cod sursa (job #1685730)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N = 503;
int n, m, r[N][N][13], log[N];
int max ( int x, int y, int z, int t )
{
if ( x >= y && x >= z && x >= y )
return x;
if ( y >= x && y >= z && y >= t )
return y;
if ( z >= x && z >= y && z >= t )
return z;
return t;
}
int main()
{
int i, j, k, p, x, y, a, b;
in >> n >> m;
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= n; j++ )
{
in >> r[i][j][0];
}
log[1] = 0;
for ( i = 2; i <= n; i++ )
log[i] = log[i/2]+1;
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= n; j++ )
{
for ( k = 1; (1 << k) <= i && (1<<k) <= j; k++ )
{
p = 1<<(k-1);
r[i][j][k] = max( r[i][j][k-1], r[i-p][j][k-1], r[i][j-p][k-1], r[i-p][j-p][k-1] );
}
}
}
for ( i = 1; i <= m; i++ )
{
in >> a >> b >> k;
p = log[k];
x = a + k - 1;
y = b + k - 1;
j = max( r[x][y][p] , r[x][ y-k+(1<<p) ][p], r[ x-k+(1<<p) ][y][p], r[ x-k+(1<<p) ][ y-k+(1<<p) ][p]);
out<<j<<'\n';
}
return 0;
}