Pagini recente » Cod sursa (job #2645446) | Cod sursa (job #2700690) | Cod sursa (job #1317598) | Cod sursa (job #807699) | Cod sursa (job #87226)
Cod sursa(job #87226)
#include <cstdio>
#include <cstdlib>
#define MAX 500
int N,M, v[MAX][MAX], a[MAX][MAX][10];
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;
};