Pagini recente » Cod sursa (job #818156) | Cod sursa (job #119014) | Cod sursa (job #2748672) | Cod sursa (job #423156) | Cod sursa (job #1626041)
#include <bits/stdc++.h>
using namespace std;
int n,q,mat[505][505],A[505][505][10],lg[505];
int max(int a,int b,int c,int d)
{
int ans=a;
if (b>ans) ans=b;
if (c>ans) ans=c;
if (d>ans) ans=d;
return ans;
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d %d",&n,&q);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
scanf("%d",&mat[i][j]);
A[i][j][0]=mat[i][j];
}
if (i>1) lg[i]=lg[i>>1]+1;
}
for (int k=1;(1<<k)<=n;k++)
{
for (int i=1;i<=n-(1<<k)+1;i++)
{
for (int j=1;j<=n-(1<<k)+1;j++)
{
int l=1<<(k-1);
A[i][j][k]=max(A[i][j][k-1],A[i+l][j][k-1],A[i][j+l][k-1],A[i+l][j+l][k-1]);
}
}
}
int i,j,k,l,sh,sol;
while (q--)
{
scanf("%d %d %d",&i,&j,&k);
l=lg[k]; sh=k-(1<<l);
sol=max(A[i][j][l],A[i+sh][j][l],A[i][j+sh][l],A[i+sh][j+sh][l]);
printf("%d\n",sol);
}
return 0;
}