Pagini recente » Cod sursa (job #1235809) | Cod sursa (job #642384) | Cod sursa (job #2214900) | Cod sursa (job #1860060) | Cod sursa (job #2616107)
#include <bits/stdc++.h>
#define NMAX 502
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int a[NMAX][NMAX][12];
int n, m;
void read()
{
int i, j;
f>>n>>m;
for(i = 1; i <= n; ++i)
for(j = 1; j <= n; ++j)
f>>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)
{
f>>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];
g<<max;
}
}
void print()
{
int i, j, k;
for(k = 0; k <= 5; ++k)
{
g<<k;
for(i = 1; i <= n; ++i)
{
for(j = 1; j <= n; ++j)
g<<a[i][j][k]<<endl;
}
g<<endl;
}
}
int main()
{
read();
solve();
//print();
query();
return 0;
}