Pagini recente » Cod sursa (job #2084675) | Cod sursa (job #1954086) | Cod sursa (job #1415264) | Cod sursa (job #2232292) | Cod sursa (job #107919)
Cod sursa(job #107919)
#include <cstdio>
#define dim 501
#define log 10
int N, M, Sol;
int P[dim], A[dim][dim], B[dim][dim][log];
int max(int a, int b)
{
return
a > b ? a : b;
}
int main()
{
freopen("plantatie.in", "rt", stdin);
freopen("plantatie.out", "wt", stdout);
int i, j, k, l, q;
for(scanf("%d %d", &N, &M), i=1; i<=N; ++i)
for(j=1; j<=N; ++j) scanf("%d", &A[i][j]);
P[1] = 0;
for(i=2; i<=N; ++i)
if( 1 << (P[i-1] + 1) <= i )
P[i] = P[i-1] + 1;
else
P[i] = P[i-1];
for(k=N, l=0; k; k>>=1, ++l);
for(i=1; i<=N; ++i)
for(j=1; j<=N; ++j) B[i][j][0] = A[i][j];
-- l;
for(k=1; k<=l; ++k)
for(i=1; i<=N; ++i)
for(j=1; j<=N; ++j)
if(i + (1 << k) <= N && j + (1 << k) <= N)
{
B[i][j][k] = B[i][j][k-1];
B[i][j][k] = max(B[i][j][k], B[i][j+(1<<(k-1))][k-1]);
B[i][j][k] = max(B[i][j][k], B[i+(1<<(k-1))][j][k-1]);
B[i][j][k] = max(B[i][j][k], B[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
int p;
for(q=1; q<=M; ++q)
{
scanf("%d %d %d", &i, &j, &l);
k = P[l];
p = 1 << k;
Sol = B[i][j][k];
Sol = max(Sol, B[i+l-p][j][k]);
Sol = max(Sol, B[i][j+l-p][k]);
Sol = max(Sol, B[i+l-p][j+l-p][k]);
printf("%d\n", Sol);
}
fclose(stdin);
fclose(stdout);
return 0;
}