Pagini recente » Cod sursa (job #1788198) | Cod sursa (job #663252) | Cod sursa (job #1420827) | Cod sursa (job #2913122) | Cod sursa (job #2514423)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 500;
int d[12][NMAX + 5][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[k][i][j] = max(max(d[k - 1][i][j] , d[k - 1][i][j + (1 << (k - 1))]) , max(d[k - 1][i + (1 << (k - 1))][j] , d[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]));
}
int solve(int x , int y , int k)
{
int j , xf , yf;
xf = x + k - 1;
yf = y + k - 1;
j = 0;
while((1 << j) <= k)
j ++;
j --;
return max(max(d[j][x][y] , d[j][x][yf - (1 << k) + 1]) , max(d[j][xf - (1 << j) + 1][y] , d[j][xf - (1 << j) + 1][yf - (1 << j) + 1]));
}
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[0][i][j]);
dinamica();
for(i = 1 ; i <= m ; i ++)
{
scanf("%d%d%d" , &x , &y , &k);
printf("%d\n" , solve(x , y , k));
}
return 0;
}