Pagini recente » Cod sursa (job #1132623) | Cod sursa (job #568607) | Cod sursa (job #269160) | Cod sursa (job #3207646) | Cod sursa (job #110615)
Cod sursa(job #110615)
#include <cstdio>
#define NMAX 502
int a[NMAX][NMAX][12];
int n, m;
int tmpx;
void read()
{
int i, j;
scanf("%d %d ", &n, &m);
for(i = 1; i <= n; ++i)
for(j = 1; j <= n; ++j)
{
scanf("%d ", &a[i][j][0]);
}
}
void solve()
{
int i, j, k, aux;
for(k = 1; k <= 9; ++k)
for(i = 1, aux = (1<<(k-1)); i <= n; ++i)
for(j = 1; j <= n; ++j)
{
a[i][j][k] = a[i][j][k-1];
if(i + aux <= n && a[i][j][k] < a[i + aux][j][k-1])
a[i][j][k] = a[i + aux][j][k-1];
if(j + aux <= n && a[i][j][k] < a[i][j + aux][k-1])
a[i][j][k] = a[i][j + aux][k-1];
if(j + aux <= n && i + aux <= n && a[i][j][k] < a[i + aux][j + aux][k-1])
a[i][j][k] = a[i + aux][j + aux][k-1];
}
}
void query()
{
int max, i, x, y, z, p, p2;
int pow[NMAX], pow2[NMAX];
for(pow[0] = pow[1] = 1, pow2[1] = pow2[0] = 0, i = 2; i < NMAX; ++i)
if(pow[i-1]*2 <= i)
pow[i] = pow[i-1]*2, pow2[i] = 1+pow2[i-1];
else
pow[i] = pow[i-1], pow2[i] = pow2[i-1];
for(i = 0; i < m; ++i)
{
scanf("%d %d %d", &x, &y, &z);
p2 = pow[z];
p = pow2[z];
max = a[x][y][p];
if(x+z-p2 > 0 && x+z-p2 <= n && a[x+z-p2][y][p] > max)
max = a[x+z-p2][y][p];
if(y+z-p2 > 0 && y+z-p2 <= n && a[x][y+z-p2][p] > max)
max = a[x][y+z-p2][p];
if(x+z-p2 > 0 && x+z-p2 <= n && y+z-p2 > 0 && y+z-p2 <= n && a[x+z-p2][y+z-p2][p] > max)
max = a[x+z-p2][y+z-p2][p];
printf("%d\n", max);
}
}
int main()
{
int i, j, k;
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
read();
solve();
query();
return 0;
}