Pagini recente » Cod sursa (job #250608) | Cod sursa (job #477017) | Cod sursa (job #48510) | Cod sursa (job #292201) | Cod sursa (job #25000)
Cod sursa(job #25000)
#include <stdio.h>
#define NMAX 501
#define log2NMAX 10
#define MMAX 75.000
int N,M;
int A[NMAX][NMAX][log2NMAX];
inline int max(int a, int b)
{
return a < b ? b : a;
}
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d %d", &N, &M);
for (int i = 1; i<=N; ++i)
{
for (int j = 1; j<=N; ++j)
{
scanf("%d", &A[i][j][0]);
}
}
// preprocesare in O(N^2*logN)
for (int k = 1, p = 2; p<=N; ++k, p*=2)
{
for (int i1 = 1; i1<=N-p+1; ++i1)
{
for (int j1 = 1; j1<=N-p+1; ++j1)
{
int i2 = i1 + p/2;
int j2 = j1 + p/2;
A[i1][j1][k] = max(max(A[i1][j1][k-1], A[i2][j1][k-1]), max(A[i1][j2][k-1], A[i2][j2][k-1]));
}
}
}
// interogare in O(M) * O(1)
for (int tz = 0; tz<M; ++tz)
{
int i1,j1,L;
scanf("%d %d %d", &i1, &j1, &L);
int k,p;
for (k=0, p=1; p<L; ++k, p*=2);
--k;
p/=2;
int i2 = i1+L-p;
int j2 = j1+L-p;
int r = max(max(A[i1][j1][k], A[i1][j2][k]), max(A[i2][j1][k], A[i2][j2][k]));
printf("%d\n", r);
}
}