Pagini recente » Cod sursa (job #1675341) | Cod sursa (job #1163111) | Cod sursa (job #3159683) | Cod sursa (job #133494)
Cod sursa(job #133494)
#include <cstdio>
#include <algorithm>
const int maxn = 501;
const int maxm = 75001;
FILE *in = fopen("plantatie.in","r"), *out = fopen("plantatie.out","w");
int n, m;
int b[maxn][maxn][10];
void read()
{
fscanf(in, "%d %d", &n, &m);
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j )
fscanf(in, "%d", &b[i][j][0]);
}
int h[4];
int max(int x, int y, int p, int q)
{
h[0] = x, h[1] = y, h[2] = p, h[3] = q;
int ret = h[0];
for ( int i = 1; i < 4; ++i )
if ( h[i] > ret )
ret = h[i];
return ret;
}
void prec()
{
for ( int k = 1; 1 << k <= n; ++k)
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j )
{
int p = 1 << (k - 1);
if ( i + p <= n && j + p <= n )
b[i][j][k] = max(b[i][j][k-1], b[i][j+p][k-1], b[i+p][j][k-1], b[i+p][j+p][k-1]);
}
}
int main()
{
read();
prec();
int x, y, z;
for ( int i = 1; i <= m; ++i )
{
fscanf(in, "%d %d %d", &x, &y, &z);
int p = 0;
while ( 1 << p <= z )
++p;
--p;
int pp = 1 << p;
fprintf(out, "%d\n", max(b[x][y][p], b[x][y+z-pp][p], b[x+z-pp][y][p], b[x+z-pp][y+z-pp][p]));
}
return 0;
}