Pagini recente » Cod sursa (job #275789) | Cod sursa (job #1606775) | Cod sursa (job #1285346) | Cod sursa (job #1574629) | Cod sursa (job #76421)
Cod sursa(job #76421)
#include<stdio.h>
#define Nm 501
#define LognM 9
#define max(a,b) ((a)>(b)?(a):(b))
int M[LognM][Nm][Nm],n,m;
void read()
{
int i,j;
freopen("plantatie.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d",&M[0][i][j]);
}
void preprocessing()
{
int k,i,j;
for(k=1;1<<k<=n;++k)
for(i=1;i<=n-(1<<k)+1;++i)
for(j=1;j<=n-(1<<k)+1;++j)
{
M[k][i][j]=M[k-1][i][j];
M[k][i][j]=max(M[k][i][j],M[k-1][i+(1<<k-1)][j]);
M[k][i][j]=max(M[k][i][j],M[k-1][i][j+(1<<k-1)]);
M[k][i][j]=max(M[k][i][j],M[k-1][i+(1<<k-1)][j+(1<<k-1)]);
}
}
void answer()
{
int i,j,k,l,ans;
freopen("plantatie.out","w",stdout);
while(m--)
{
scanf("%d%d%d",&i,&j,&l);
for(k=0;1<<k<=l;++k);
--k;
ans=M[k][i][j];
ans=max(ans,M[k][i+l-(1<<k)][j]);
ans=max(ans,M[k][i][j+l-(1<<k)]);
ans=max(ans,M[k][i+l-(1<<k)][j+l-(1<<k)]);
printf("%d\n",ans);
}
}
int main()
{
read();
preprocessing();
answer();
return 0;
}