Pagini recente » Cod sursa (job #15295) | Cod sursa (job #2285770) | Cod sursa (job #2023931) | Cod sursa (job #873056) | Cod sursa (job #110856)
Cod sursa(job #110856)
#include <cstdio>
int n,m,i,j,k,p,l,put,a[501][501][10];
int max(int a, int b, int c, int d)
{
if(a<b) a=b;
if(a<c) a=c;
if(a<d) a=d;
return a;
}
void solve ()
{
p=0;
int pp=1;
put=2;
while(pp*2<=n)
{
pp*=2;
p++;
}
for(l=1;l<=p;l++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if((i+put-1<=n)&&(j+put-1<=n))
a[i][j][l]=max(a[i][j][l-1],a[i+put/2][j][l-1],a[i][j+put/2][l-1],a[i+put/2][j+put/2][l-1]);
put=put*2;
}
}
int main ()
{
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",&a[i][j][0]);
solve();
// printf("%d\n", a[5][5][2]);
while (m!=0)
{ scanf("%d%d%d",&i,&j,&k);
p=0;
put=1;
while(put*2<=k)
{ put=put*2;
p++;
}
int sol=max(a[i][j][p],a[i+k-put][j][p],a[i][j+k-put][p],a[i+k-put][j+k-put][p]);
printf("%d\n",sol);
m--;
}
fclose(stdin);
fclose(stdout);
return 0;
}