Pagini recente » Cod sursa (job #482189) | Cod sursa (job #1146052) | Cod sursa (job #2570239) | Cod sursa (job #36040) | Cod sursa (job #152352)
Cod sursa(job #152352)
#include <stdio.h>
int i,j,k,p,q,r,n,m;
int a[501][501];
int c[501][501][10];
int main()
{
freopen("plant.in","r",stdin);
freopen("plant.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
c[i][j][0]=a[i][j];
}
for (p=0; p<=n; p++)
if ((1<<(p+1))>n) break;
for (k=1; k<=p; k++)
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
if (j+(1<<k)-1<=n && i+(1<<k)-1<=n)
{
int max=c[i][j][k-1];
if (c[i+(1<<(k-1))][j][k-1]>max) max=c[i+(1<<(k-1))][j][k-1];
if (c[i][j+(1<<(k-1))][k-1]>max) max=c[i][j+(1<<(k-1))][k-1];
if (c[i+(1<<(k-1))][j+(1<<(k-1))][k-1]>max) max=c[i+(1<<(k-1))][j+(1<<(k-1))][k-1];
if (max>c[i][j][k]) c[i][j][k]=max;
}
for (i=1; i<=m; i++)
{
scanf("%d %d %d",&p,&q,&r);
for (j=0; j<=r; j++)
if ((1<<(j+1))>=r) break;
int max=c[p][q][j];
if (c[p][q+r-(1<<j)][j]>max) max=c[p][q+r-(1<<j)][j];
if (c[p+r-(1<<j)][q][j]>max) max=c[p+r-(1<<j)][q][j];
if (c[p+r-(1<<j)][q+r-(1<<j)][j]>max) max=c[p+r-(1<<j)][q+r-(1<<j)][j];
printf("%d\n",max);
}
return 0;
}