Pagini recente » Cod sursa (job #1182049) | Cod sursa (job #2209922) | Cod sursa (job #2473212) | Cod sursa (job #1821121) | Cod sursa (job #1980581)
#include <stdio.h>
#include <stdlib.h>
int r[502][502][10],log[501],tut[501][501];
int max1(int x,int y)
{
if(x>y) return x;
return y;
}
int max(int x,int y,int z,int t)
{
if(max1(x,y)>max1(z,t)) return max1(x,y);
return max1(z,t);
}
int main()
{
int n,m,i,j,k,a,b,c;
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d",&tut[i][j]);
for(i=2; i<=n; i++)
log[i]=log[i/2]+1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
r[i][j][0]=tut[i][j];
for(k=1; k<=log[n] && k<=log[n]; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(k<=log[n-i+1] && k<=log[n-j+1])
r[i][j][k]=max(r[i][j][k-1],r[i+(1<<(k-1))][j+(1<<(k-1))][k-1],r[i+(1<<(k-1))][j][k-1],r[i][j+(1<<(k-1))][k-1]);
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&c);
j=log[c];
printf("%d\n",max(r[a][b][j],r[a+c-(1<<j)][b][j],r[a+c-(1<<j)][b+c-(1<<j)][j],r[a][b+c-(1<<j)][j]));
}
return 0;
}