Pagini recente » Cod sursa (job #2699543) | Cod sursa (job #593552) | Cod sursa (job #455083) | Cod sursa (job #3154339) | Cod sursa (job #87230)
Cod sursa(job #87230)
#include <cstdio>
#include <cstdlib>
#define MAX 600
int N,M, v[MAX][MAX], a[MAX][MAX][15];
inline int max ( int p1, int p2, int p3, int p4)
{
int rez = p1;
if ( p2 > rez) rez = p2;
if ( p3 > rez) rez = p3;
if ( p4 > rez) rez = p4;
return rez;
};
void citire()
{
scanf("%d%d\n", &N, &M);
for (int i=0; i<N; i++)
for (int j =0; j<N; j++)
scanf("%d", &a[i][j][0]);
};
void compute()
{
for (int k=1; 1<<(k-1) <= N; k++)
for (int i=0; i<N; i++)
for (int j=0; j<N; j++)
if ( i + (1<<(k-1)) < N && j + (1<<(k-1)) < N)
a[i][j][k] = max(
a[i][j][k-1],
a[i][j+ (1<<(k-1))][k-1],
a[i+(1<<(k-1))][j][k-1],
a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]
);
else
a[i][j][k] = a[i][j][k-1];
};
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
citire();
compute();
for ( ; M>0; M--)
{
int i,j,k;
scanf("%d%d%d\n", &i, &j, &k);
i--; j--;
int p = 0;
for ( ; 1<<(p+1) <= k; p++);
int rez = max(
a[i][j][p],
a[i][j+k-(1<<p)][p],
a[i+k-(1<<p)][j][p],
a[i+k-(1<<p)][j+k-(1<<p)][p]
);
printf("%d\n", rez);
};
fclose(stdin);
fclose(stdout);
return 0;
};