Pagini recente » Cod sursa (job #993494) | Cod sursa (job #751113) | Cod sursa (job #3271012) | Cod sursa (job #1982504) | Cod sursa (job #2514437)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 500;
int d[NMAX + 5][NMAX + 5][12] , log[NMAX + 5] , n;
void dinamica()
{
int i , j , k;
for(k = 1 ; (1 << k) <= n ; k ++)
for(i = 1 ; i + (1 << k) - 1 <= n ; i ++)
for(j = 1 ; j + (1 << k) - 1 <= n ; j ++)
d[i][j][k] = max(max(d[i][j][k - 1] , d[i][j + (1 << (k - 1))][k - 1]) , max(d[i + (1 << (k - 1))][j][k - 1] , d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
}
int solve(int x , int y , int k)
{
int j , xf , yf;
xf = x + k - 1;
yf = y + k - 1;
j = log[k];
return max(max(d[x][y][j] , d[x][yf - (1 << k) + 1][j]) , max(d[xf - (1 << j) + 1][y][j] , d[xf - (1 << j) + 1][yf - (1 << j) + 1][j]));
}
int main()
{
freopen("plantatie.in" , "r" , stdin);
freopen("plantatie.out" , "w" , stdout);
int m , k , i , j , x , y;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= n ; i ++)
for(j = 1 ; j <= n ; j ++)
scanf("%d" , &d[i][j][0]);
dinamica();
for(i = 2 ; i <= n ; i = i * 2)
log[i] = 1;
for(i = 1 ; i <= n ; i ++)
log[i] = log[i] + log[i - 1];
for(i = 1 ; i <= m ; i ++)
{
scanf("%d%d%d" , &x , &y , &k);
printf("%d\n" , solve(x , y , k));
}
return 0;
}