Pagini recente » Cod sursa (job #72114) | Cod sursa (job #1224027) | Cod sursa (job #2009830) | Cod sursa (job #1754830) | Cod sursa (job #71277)
Cod sursa(job #71277)
using namespace std;
#include <cstdio>
#include <algorithm>
#define maxn 512
#define maxlog 10
int dp[maxlog][maxn][maxn];
int n, m;
void read()
{
freopen("plantatie.in","r",stdin);
scanf("%d %d\n", &n, &m);
int i, j;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j) scanf("%d ", &dp[0][i][j]);
}
void init()
{
int i, j, k;
for(k=1;(1<<k)<=n ; ++k)
for(i=1;i+(1<<k)-1<=n;++i)
for(j=1;j+(1<<k)-1<=n;++j)
{
dp[k][i][j]=dp[k-1][i+(1<<(k-1))][j+(1<<(k-1))];
dp[k][i][j]>?=dp[k-1][i][j];
dp[k][i][j]>?=dp[k-1][i+(1<<(k-1))][j];
dp[k][i][j]>?=dp[k-1][i][j+(1<<(k-1))];
}
}
int query(int i, int j, int k)
{
int t=k;
int v;
for(v=1;(1<<v)<t;++v);
if((1<<v)>t)--v;
int sol=dp[v][i][j];
sol>?=dp[v][i-(1<<v)+k][j];
sol>?=dp[v][i][j-(1<<v)+k];
sol>?=dp[v][i-(1<<v)+k][j-(1<<v)+k];
return sol;
}
void solve()
{
int i, j, k;
while(m--)
{
scanf("%d %d %d\n", &i, &j, &k);
printf("%d\n", query(i, j, k));
}
}
int main()
{
freopen("plantatie.out","w",stdout);
read();
init();
solve();
return 0;
}