Pagini recente » Cod sursa (job #12887) | Cod sursa (job #2285269) | Cod sursa (job #2467553) | Cod sursa (job #680525) | Cod sursa (job #1403352)
#include <cstdio>
#include <algorithm>
using namespace std;
int n , m , i , j , k , x , y , l , X , Y;
int d[9][510][510];
int lg[510];
void rmq()
{
lg[1] = 0;
for (int i = 2; i <= n; ++i) lg[i] = lg[i >> 1] + 1;
for (int k = 1; k <= lg[n]; ++k)
{
int lat = (1 << k);
for (int i = 1; i <= n - lat / 2; ++i)
for (int j = 1; j <= n - lat / 2; ++j)
d[k][i][j] = max(max(d[k-1][i][j] , d[k-1][i+lat/2][j+lat/2]) , max(d[k-1][i+lat/2][j] , d[k-1][i][j+lat/2]));
}
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
for (j= 1; j <= n; ++j)
scanf("%d", &d[0][i][j]);
for (rmq() , i = 1; i <= m; ++i)
{
scanf("%d %d %d", &x, &y, &l);
X = x + l - 1; Y = y + l - 1; k = lg[l];
printf("%d\n", max( max(d[k][x][y] , d[k][X-(1<<k)+1][Y-(1<<k)+1]) , max(d[k][X-(1<<k)+1][y] , d[k][x][Y-(1<<k)+1]) ) );
}
return 0;
}