Pagini recente » Cod sursa (job #1810878) | Cod sursa (job #2085112) | Cod sursa (job #2892726) | Cod sursa (job #1090758) | Cod sursa (job #19676)
Cod sursa(job #19676)
# include <stdio.h>
# define _fin "plantatie.in"
# define _fout "plantatie.out"
# define maxn 512
int b[maxn][maxn];
int a[maxn][maxn][9];
int n, m;
inline int pow2(int k) { return 1 << k; }
inline int max(int a, int b) { return a>b?a:b; }
inline int max(int a, int b, int c, int d) { return max( max(a, b), max(c, d) ); }
void readf()
{
freopen(_fin, "r", stdin);
int i, j;
for (scanf("%d %d", &n, &m), i=1; i<=n; i++)
for (j=1; j<=n; j++)
scanf("%d", &b[i][j]);
}
void solve()
{
freopen(_fout, "w", stdout);
int to, i, j, k, p, ti;
for (to=0; pow2(to)<=n; ++to); --to;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
a[i][j][0] = b[i][j];
for (k=1; k<=to; k++)
for (ti=i-pow2(k-1), i=1; i<=ti; i++)
for (j=1; j<=ti; j++)
a[i][j][k] = max( a[i][j][k-1], a[i+pow2(k-1)][j][k-1], a[i][j+pow2(k-1)][k-1], a[i+pow2(k-1)][j+pow2(k-1)][k-1] );
for (; m; --m)
{
scanf("%d%d%d", &i, &j, &k);
for (p=0; pow2(p)<=k; p++); --p;
printf("%d\n", max( a[i][j][p], a[i][j+k-pow2(p)][p], a[i+k-pow2(p)][j][p], a[i+k-pow2(p)][j+k-pow2(p)][p] ) );
}
}
int main()
{
readf();
solve();
return 0;
}